C# 带有单选按钮的ListView仅在右键单击时触发/引发选择更改(需要左键单击)
我有ListViewItem的以下XAML/控件模板:C# 带有单选按钮的ListView仅在右键单击时触发/引发选择更改(需要左键单击),c#,wpf,listview,listviewitem,selectionchanged,C#,Wpf,Listview,Listviewitem,Selectionchanged,我有ListViewItem的以下XAML/控件模板: <Window.Resources> <ControlTemplate x:Key="ItemTemplate" TargetType="ListViewItem"> <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="0,5,0,5" BorderBrush="{TemplateBind
<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设置为fire时,它仅在用鼠标右键单击选中单选按钮时才会激发。我需要它在正常的左键点击时启动
<ListView x:Name="radioListView" SelectionMode="Single" ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemDataTemplate}" SelectionChanged="radioListView_SelectionChanged" Loaded="radioListView_Loaded"></ListView>
似乎找不到任何与右键单击强制selectionchanged事件相关的内容。标准是左键单击
提前感谢:)
编辑:
因此,我注意到,当我在左键单击单选按钮(及其相关文本)外单击时,SelectionChanged事件会触发。这就好像单选按钮独立于listview工作一样。SelectionChanged事件在单选按钮元素内单击鼠标右键时触发。奇怪,还在想办法解决。那真奇怪!选择在右键单击时进行 我只能建议你采取一种无事件的方法 您可以通过绑定SelectedItem/SelectedValue属性等来使用MVVM模式 您还可以利用ListView的单一选择模式来自动“分组”单选按钮,以便一次只选择一个
e、 g.radiobutton的
IsChecked
绑定到祖先ListViewItem的IsSelected
属性,双向。这样,当选中单选按钮时,它将自动选择该列表视图行,SelectedItem\Value binding将自动触发。在ListView的单选模式下,单击下一个单选按钮将自动取消选择上一行。我不确定为什么鼠标左键不起作用,但下面是我用于显示带有单选按钮的列表框的样式。它可以在鼠标左键和右键的同时正常工作
<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选择行为是在单击项目时将LeftMouseClick事件标记为已处理我在XAML中使用列表框中的芯片进行材质设计时遇到了完全相同的问题。因为样式使用了单选按钮,所以左键单击不会触发选择更改(甚至更新绑定的SelectedItem),但右键单击会更改选择。关键是将IsChecked的样式改为IsChecked=“{Binding Path=IsSelected,RelativeSource={RelativeSource TemplatedParent},Mode=TwoWay}”