Laden...

Listbox Event Handle mit mehren Button in einem Item

Erstellt von Alphawolf1988 vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.242 Views
A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 15 Jahren
Listbox Event Handle mit mehren Button in einem Item

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! 😁

R
104 Beiträge seit 2006
vor 15 Jahren

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!

A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 15 Jahren

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! 😁

A
Alphawolf1988 Themenstarter:in
68 Beiträge seit 2008
vor 15 Jahren

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! 😁