WPF ListBoxItem-Auswahlproblem


Answers

Sie können auch die IsChecked-Eigenschaft der CheckBox- und IsSelected-Eigenschaft des ListBoxItem binden:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding DisplayText}" IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
Question

Ich habe ein Listenfeld, in dem die Elemente Kontrollkästchen enthalten:

<ListBox Style="{StaticResource CheckBoxListStyle}" Name="EditListBox">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Click="Checkbox_Click" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" Content="{Binding Path=DisplayText}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Das Problem, das ich habe, ist, dass, wenn ich auf die Checkbox oder seinen Inhalt klicke, das übergeordnete ListBoxItem nicht ausgewählt wird. Wenn ich auf den Leerraum neben dem Kontrollkästchen klicke, wird das ListBoxItem ausgewählt.

Das Verhalten, das ich versuche zu erhalten, besteht darin, in der Lage zu sein, ein oder mehrere Elemente in der Liste auszuwählen und die Kontrollkästchen mit der Leertaste ein- und auszuschalten.

Einige weitere Infos:

private void Checkbox_Click(object sender, RoutedEventArgs e)
{
    CheckBox chkBox = e.OriginalSource as CheckBox;
}

In dem obigen Code, wenn ich auf ein Kontrollkästchen klicke, ist e.Handled falsch und chkBox.Parent ist null.

Kents Antwort brachte mich auf den richtigen Weg.

<ListBox Style="{StaticResource CheckBoxListStyle}" Name="EditListBox" PreviewKeyDown="ListBox_PreviewKeyDown">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" />
                <TextBlock Text="{Binding DisplayText}"/>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Ich musste PreviewKeyDown verwenden, weil standardmäßig die Auswahl der Leertaste in einem Listenfeld aufgehoben wird, bis auf das zuletzt ausgewählte Element.




Links



Tags

wpf   listbox