Laden...

SharpVector Viewbox in Listbox

Erstellt von MMCSharp vor einem Jahr Letzter Beitrag vor einem Jahr 648 Views
M
MMCSharp Themenstarter:in
84 Beiträge seit 2022
vor einem Jahr
SharpVector Viewbox in Listbox

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?

4.931 Beiträge seit 2008
vor einem Jahr

Bist du sicher, daß die Source-Uri stimmt (m.E. wird "ms-appdata: nur bei UWP verwendet)?

16.806 Beiträge seit 2008
vor einem Jahr

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.

M
MMCSharp Themenstarter:in
84 Beiträge seit 2022
vor einem Jahr

@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...

16.806 Beiträge seit 2008
vor einem Jahr

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/

4.931 Beiträge seit 2008
vor einem Jahr

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.

M
MMCSharp Themenstarter:in
84 Beiträge seit 2022
vor einem Jahr

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.

M
MMCSharp Themenstarter:in
84 Beiträge seit 2022
vor einem Jahr

@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...

4.931 Beiträge seit 2008
vor einem Jahr

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.

M
MMCSharp Themenstarter:in
84 Beiträge seit 2022
vor einem Jahr

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>

4.931 Beiträge seit 2008
vor einem Jahr

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.

M
MMCSharp Themenstarter:in
84 Beiträge seit 2022
vor einem Jahr

Vielen vielen Dank @Th69! Jetzt passt es!