我有一个ListViewItem的以下XAML /控制模板:
<Window.Resources>
<ControlTemplate x:Key="ItemTemplate" TargetType="ListViewItem">
<Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="0,5,0,5" BorderBrush="{TemplateBinding Border.BorderBrush}"
Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True">
<ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}"
HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</Border>
</ControlTemplate>
<Style TargetType="ListViewItem">
<Setter Property="Template" Value="{StaticResource ItemTemplate}" />
</Style>
<DataTemplate x:Key="ItemDataTemplate">
<RadioButton
x:Name="radiobutton" GroupName="LeGroup"
Content="{Binding Path=Name}" Checked="radiobutton_Checked" />
</DataTemplate>
</Window.Resources>
当我尝试将SelectionChanged设置为触发时,仅当使用鼠标右键单击选中单选按钮时,它才会触发。我需要它在正常左键单击时触发。
<ListView x:Name="radioListView" SelectionMode="Single" ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemDataTemplate}" SelectionChanged="radioListView_SelectionChanged" Loaded="radioListView_Loaded"></ListView>
似乎无法找到任何指向右键单击强制选择更改事件的内容。标准是左键单击。
提前谢谢你:)
修改
所以我注意到当我单击左键单击单选按钮(及其相关文本)的OUTSIDE时,SelectionChanged事件将触发。就像单选按钮独立于列表视图一样工作。 SelectionChanged事件在右键单击INSIDE单选按钮元素时触发。很奇怪,还是想弄清楚。
答案 0 :(得分:0)
我只能建议你采取无可挑剔的做法......
您可以通过绑定SelectedItem / SelectedValue属性等来使用MVVM模式。
此外,您可以利用ListView的单一选择模式自动“分组”单选按钮,以便一次只选择一个
e.g。 radiobutton的IsChecked
以两种方式绑定到祖先ListViewItem的IsSelected
属性。这样,当选中单选按钮时,它将自动选择列表视图行,并且SelectedItem \ Value绑定将自动触发。在ListView的单选模式下,下一个单选按钮点击将自动取消选择上一行。
答案 1 :(得分:0)
我不确定为什么鼠标左键不起作用,但这是我用来显示带有RadioButtons的ListBox的样式。单击鼠标右键和鼠标左键都可以正常工作
<Style x:Key="ListBoxAsRadioButtonsStyle" TargetType="{x:Type ListBox}">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="KeyboardNavigation.DirectionalNavigation" Value="Cycle" />
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListBoxItem}" >
<Setter Property="Margin" Value="2, 2, 2, 0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border Background="Transparent">
<RadioButton IsHitTestVisible="False" Focusable="false"
Content="{TemplateBinding ContentPresenter.Content}"
IsChecked="{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Style>
像
一样使用<ListBox ItemsSource="{Binding MyItems}"
Style="{StaticResource ListBoxAsRadioButtonsStyle}" />
如果我不得不猜测你的问题,我猜想当你点击一个项目时,常规的ListView Selection行为会将LeftMouseClick事件标记为Handled