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
Listbox Event Handle mit mehren Button in einem Item
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

Listbox Event Handle mit mehren Button in einem Item

beantworten | zitieren | melden

Hallo liebe Community!

Ich zerbreche mir jetzt schon seit mehreren Tagen den Kopf über folgendes Problem. Ich habe eine WPF Anwendung programmiert in der sich eine ListBox befindet. Diese ListBox nutzt folgendes ItemTemplate:

<ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="3,3,3,3">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition Height="25px" />
                        </Grid.RowDefinitions>
                        <TextBlock x:Name="Text" Text="{Binding browsergame}" FontSize="11" FontWeight="bold" Foreground="DarkBlue" Grid.Column="0" Grid.Row="0" />
                        <Button Click="Button_Login" VerticalAlignment="Center" Name="buttonLogin" Grid.Column="0" Grid.Row="1" Width="20" Height="20" HorizontalAlignment="Left">
                            <Image Source="../Images/login.png"/>
                        </Button>
                        <Button Click="Button_Delete" VerticalAlignment="Center" Name="buttonDelete" Grid.Column="0" Grid.Row="1" Width="20" Height="20" HorizontalAlignment="Right">
                            <Image Source="../Images/delete.png"/>
                        </Button>
                    </Grid>
                </DataTemplate>    
            </ListBox.ItemTemplate>


Heißt auf gut dt. jedes ListBox Item hat 2 Buttons mit der Option Login und Löschen. Mein Problem ist jetzt, das ich nicht weiß wie ich feststellen soll, welcher Button geklickt wurde (Der Button in Item1 oder 2 oder 3...etc) da alle Button die gleiche Handle Funktion Button_Login oder Button_Delete aufrufen (sowie die gleiche Namensbezeichnung). Meine Idee war jetzt das man anhand des "selected Item" der Listbox den Index herrausfinden könnte, welches Item angesprochen ist, jedoch wenn ich gleich auf das Button eines Items drücke wird es nicht als "selected" makiert.

Mir will keine Lösung einfallen


MFG Wolf
Wer zuerst kommt malt zuerst, wer danach kommt malt drüber!
private Nachricht | Beiträge des Benutzers
Richter
myCSharp.de - Member



Dabei seit:
Beiträge: 105
Herkunft: Chemnitz

beantworten | zitieren | melden

Du könntest das klickevent des Listitems abfangen und dann quasie in Handarbeit selber rausfinden, über die Mauskoordinaten, welche Butten getrückt wurde. Das ist ja mit dem VisualTreeHelper sehr einfach.

Aber ich vermute mal, es gibt noch eine elegantere Lösung
Nevu - Intelligente Maschinen, die Zukunft alles rund um das Thema Künstliche Intelligenz!
private Nachricht | Beiträge des Benutzers
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

beantworten | zitieren | melden

Hmm nur wie könnt ich da rangehen? Wie gesgat das größte Problem ist das er das ListItem einfach nicht makiert wenn ich auf den Button drücke. Ich weiß partout nicht wie ich den ItemIndex vorher ermittle. Damals gabs imemr ne Funktion indexFromPoint() aber die gibts ja in WPF nicht -.-

MFG Wolf
Wer zuerst kommt malt zuerst, wer danach kommt malt drüber!
private Nachricht | Beiträge des Benutzers
Alphawolf1988
myCSharp.de - Member



Dabei seit:
Beiträge: 68

Themenstarter:

beantworten | zitieren | melden

Ok ich habe eine Lösung für das Problem gefunden


        private void Button_Login(object sender, RoutedEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            while ((dep != null) && !(dep is ListBoxItem))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            if (dep == null)
                return;

            int item = (int)bgListBox.ItemContainerGenerator.IndexFromContainer(dep);


            Button clicked = (Button)sender;
            MessageBox.Show("Button's name is: " + clicked.Name + " Index " + item.ToString());

        } // Button_Login


Vllt hat noch jemmand so ein Problem und kann dies hier nutzen.
Es wird nichts weiter gemacht als das der Elementbaum durchlaufen wird bis man zu einem Type ListBoxItem gelangt. Dann nur noch den Index auslesen mit "bgListBox.ItemContainerGenerator.IndexFromContainer(dep)"

MFG Wolf
Wer zuerst kommt malt zuerst, wer danach kommt malt drüber!
private Nachricht | Beiträge des Benutzers