我在ItemTemplate中有一个带有RadioButtons的Listview:
<ListView ItemsSource="{Binding }">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton IsChecked="{Binding Choice1}" />
<RadioButton IsChecked="{Binding Choice2}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
可以在“背景”上选择当前项目。但是,如果我单击RadioButton,则未设置SelectedItem。
所需行为:只要单击“childitem”,就会选择ListViewItem。与设置标志时的Outlook一样,选择当前邮件。
我是否必须以某种方式冒泡点击事件?
答案 0 :(得分:1)
此行为来自于IsKeyboardFocusWithin
- ListViewItem
的属性在这种情况下为假。当您单击RadioButton时,RadioButton具有键盘焦点。
<强>解决方案强>
添加一个像这样的简单触发器
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="true">
<Setter Property="IsSelected" Value="true" />
</Trigger>
</Style.Triggers>
</Style>
完整样本
<ListView ItemsSource="{Binding }">
<ListView.Resources>
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="true">
<Setter Property="IsSelected" Value="true" />
</Trigger>
</Style.Triggers>
</Style>
</ListView.Resources>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<RadioButton IsChecked="{Binding Choice1}" />
<RadioButton IsChecked="{Binding Choice2}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
注意强>
请务必选择正确的TargetType(ListViewItem
,ListBoxItem
或TreeViewItem
)
希望这有帮助