none
WPF: Problem mit Click-Event von Button in einem Template RRS feed

  • Frage

  • Hallo

    Ich habe folgendes Problem: Ich habe eine Listbox mit einem ItemTemplate, was auch hervorragend funktioniert. Nun möchte ich aber, dass der Button in diesem ItemTemplate ein Click-Event aufruft. Auch dies funktioniert wie gewollt.

    Allerdings schaffe ich es nicht, die Instanz des Buttons in dem Click Event abzugreifen. Ich erhalte stets eine NullReferenceException.

    Hier mal der Code.
    XAML:

    <ListBox Padding="-1"
                         ScrollViewer.CanContentScroll="True"
                         IsSynchronizedWithCurrentItem="True"
                         Height="auto" Background="Transparent"
                         ItemsSource="{Binding}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
    
                                <Button Width="40" Margin="5, 0" Click="ChangeLayerColor">
                                    <Button.Background>
                                        <SolidColorBrush Color="{Binding Color, Mode=TwoWay}" />
                                    </Button.Background>
                                    <Button.Template>
                                        <ControlTemplate>
                                            <Rectangle Stroke="Black" Fill="{TemplateBinding Property=Background}" />
                                        </ControlTemplate>
                                    </Button.Template>
                                </Button>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

    Code-Behind:

    private void ChangeLayerColor(object sender, RoutedEventArgs e)
            {
                try
                {
                    Button button = sender as Button;
                    string content = button.Content.ToString();
                    MessageBox.Show(content);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

    Grüße
    Dienstag, 18. November 2014 16:07

Antworten