Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SharpVector Viewbox in Listbox
MMCSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

SharpVector Viewbox in Listbox

beantworten | zitieren | melden

Hallo zusammen

ich würde gern eine Viewbox in meine ListItems einbinden. Ich erstelle dafür im Code ein Item und fülle es mit Abfragewerten.
Nur wird die Vectorgrafik nicht angezeigt.


 private void AddLocationsToList()
        {
           
            var LocationsList = (from tbl_addresses in dataContext.tbl_addresses
                                 select new
                                 {
                                     tbl_addresses.Id,
                                     tbl_addresses.StockName
                                 });

            foreach (var Item in LocationsList)
            {
                Grid grid = new Grid();
               
                RowDefinition r1 = new RowDefinition
                {
                    Height = new GridLength(30, GridUnitType.Star)
                };

                RowDefinition r2 = new RowDefinition
                {
                    Height = new GridLength(30, GridUnitType.Star)
                };
                
                 RowDefinition r3 = new RowDefinition
                {
                    Height = new GridLength(30, GridUnitType.Star)
                };

                grid.RowDefinitions.Add(r1);
                grid.RowDefinitions.Add(r2);
                grid.RowDefinitions.Add(r3);


                SharpVectors.Converters.SvgViewbox svgViewbox = new SharpVectors.Converters.SvgViewbox()
                {
                    
                    Source = new Uri("ms-appdata:///Pages/ParkingLot/Icons/warenhaus.svg"),
                    Height = 20,
                    Width = 20,
                    HorizontalAlignment = HorizontalAlignment.Left

                };

                Grid.SetRow(svgViewbox, 0);


                //Label for Warehouse ID
                Label IDLabel = new Label
                {
                    Margin = new Thickness(2, 0, 0, 0),
                    Content = Item.Id.ToString(),
                    HorizontalAlignment = HorizontalAlignment.Stretch,
                    Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)),
                    FontWeight = FontWeights.Bold
                };

                Grid.SetRow(IDLabel, 1);

                //Label for Warehouse Name
                Label StockNameLabel = new Label
                {
                    Margin = new Thickness(2, 1, 0, 0),
                    Content = Item.StockName.ToString(),
                    HorizontalAlignment = HorizontalAlignment.Stretch,
                    Foreground = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255))
                };

                Grid.SetRow(StockNameLabel, 2);


                grid.Children.Add(svgViewbox);
                grid.Children.Add(IDLabel);
                grid.Children.Add(StockNameLabel);

                ListLocations.Items.Add(grid);

            }

Weis jemand wo mein Fehler liegt?
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.320

beantworten | zitieren | melden

Bist du sicher, daß die Source-Uri stimmt (m.E. wird "ms-appdata: nur bei UWP verwendet)?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.757

beantworten | zitieren | melden

Und bist Du Dir sicher, dass Du Datenbank-Code direkt in der UI haben willst?
[Artikel] Drei-Schichten-Architektur
[Artikel] MVVM und DataBinding

PS: Dein Datenbank-Code blockiert auch den UI Thread.
Bei Windows führt das zu "Anwendung reagiert nicht" und bei Mobile Apps schießt das Betriebssystem die App ab.
private Nachricht | Beiträge des Benutzers
MMCSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

@Abt
Wenn du so frägst dann wohl eher nicht.
Ich wollte die Abfrage bereits auch schon in einen andern Thread auslagern aber das ist wohl auch nicht ganz korrekt..

Ich bin mir noch nicht ganze im klaren, wie ich alles genau machen muss und wie es genau richtig ist . Ich beschäftige mich erst seit kurzen mit C# bzw. intensiv mit richtiger Programmierung. Ich habe vorher viel mit VBA gearbeitet und aus Leidenschaft am programmieren, habe ich jetzt erst begonnen mich richtig mit einer konkreten Programmiersprache zu befassen. Adaptiv dazu habe ich ein Studium gestartet.

Über Hilfe zur Selbsthilfe würde ich mich sehr freuen!

@Th69
Ich habe es auch schon bereits mit "ms-appx:///" versucht...
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.757

beantworten | zitieren | melden

Zitat von MMCSharp
Ich wollte die Abfrage bereits auch schon in einen andern Thread auslagern aber das ist wohl auch nicht ganz korrekt..
In .NET gibts Tasks dafür (eine Abstraktion von Threads, mit denen man viel einfacher und sicherer umgehen kann).

Du kannst erstmal so weiter machen (die Logik ist dadurch ja nicht anders); wirst dann aber irgendwann angehen müssen.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.320

beantworten | zitieren | melden

Wie hast du denn das "SVG"-Bild in das Projekt eingebunden?
Um in WPF auf Ressourcen zuzugreifen: Paket-URI in WPF (es sollte bei dir also eher "pack://application:,,,Pages/ParkingLot/Icons/warenhaus.svg" heißen).

Außerdem muß die Ressource dann noch in die Anwendung einkompiliert sein: über die Eigenschaft Build Action auf "Resource" stellen im VS-Projekt.
private Nachricht | Beiträge des Benutzers
MMCSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

Hallo
Ich habe das Bild bereits als Ressource eingebunden und kompilieret . Im Xaml nutze ich die Vektor-Grafiken in Viewboxen von Sharpvectors. Dort reicht allerdings , wenn ich als Eigenschaft von source einfach "Pages/ParkingLot/Icons/warenhaus.svg" übergebe.
private Nachricht | Beiträge des Benutzers
MMCSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

@Abt

ist das eine korrekte Lösung um die Listbox zu füllen?
https://wpf-tutorial.com/listview-control/listview-data-binding-item-template/

(sofern sich das für mein vorhaben umsetzen lässt)

@Th69

das klappt irgendwie auch nicht...
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.320

beantworten | zitieren | melden

Zitat von MMCSharp
Ich habe das Bild bereits als Ressource eingebunden und kompilieret . Im Xaml nutze ich die Vektor-Grafiken in Viewboxen von Sharpvectors. Dort reicht allerdings , wenn ich als Eigenschaft von source einfach "Pages/ParkingLot/Icons/warenhaus.svg" übergebe.
Das ist ja ein absoluter Pfad, der direkt auf eine Datei in (Unterordnern vom) Ausgabeverzeichnis (bzw. korrekterweise vom aktuellen Arbeitsverzeichnis) verweist.
Das müßte dann auch so direkt im C#-Code funktionieren.

Ansonsten zeige mal deinen funktionierenden XAML-Code.
private Nachricht | Beiträge des Benutzers
MMCSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

Leider funktioniert das nicht...

Hier ein ausschnitt bei dem das alle wie gewollt klappt...

                                <Label x:Name="LbLSelectedLocation" 
                                       DockPanel.Dock="Left" 
                                       Foreground="White" 
                                       Margin="10,0,0,0" 
                                       FontWeight="Bold" 
                                       Height="Auto" 
                                       VerticalContentAlignment="Center" 
                                       FontSize="16" >Gewählter Standort
                                 </Label>

                                <Button x:Name="BtnAddNewLocation" 
                                        Click="BtnAddNewLocation_Click" 
                                        Height="30" Width="30" 
                                        DockPanel.Dock="Right" 
                                        HorizontalAlignment="Right" 
                                        Margin="2,0,2,0" 
                                        Background="Transparent" 
                                        BorderBrush="Transparent">
                                        <svgc:SvgViewbox HorizontalAlignment="Center" 
                                                                    Margin="1" VerticalAlignment="Center" 
                                                                    Source="Pages/ParkingLot/Icons/Add_New_Item.svg" />
                                </Button>
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.320

beantworten | zitieren | melden

Ich habe gerade gesehen, daß ich noch einen kleinen Fehler in meiner geposteten Uri habe (der erste Slash fehlt): "pack://application:,,,/Pages/ParkingLot/Icons/warenhaus.svg" (aber dafür habe ich dir ja auch den Link zum Nachlesen gegeben).

Dies müßte so funktionieren, wenn du das Bild (inkl. Pfad) richtig als Resource eingebunden hast, s.a. Accessing an Embedded Resource Using a Uri.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
MMCSharp
myCSharp.de - Member



Dabei seit:
Beiträge: 11

Themenstarter:

beantworten | zitieren | melden

Vielen vielen Dank @Th69! Jetzt passt es!
private Nachricht | Beiträge des Benutzers