ListView с RadioButtons запускает / поднимает SelectionChanged ТОЛЬКО при щелчке правой кнопкой мыши (нужно щелкнуть левой кнопкой мыши)
У меня есть следующий шаблон XAML/Control для ListViewItem:
<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>
Похоже, не удается найти что-либо, относящееся к принудительному выбору события по щелчку правой кнопкой мыши. Стандарт - левый клик.
Заранее спасибо:)
РЕДАКТИРОВАТЬ:
Итак, я заметил, что событие SelectionChanged срабатывает, когда я нажимаю кнопку OUTSIDE переключателя (и связанный с ним текст) при щелчке левой кнопкой мыши. Как будто радио-кнопка работает независимо от списка. Событие SelectionChanged возникает при щелчке правой кнопкой мыши по элементу переключателя. Странно, все еще пытаюсь понять это.
2 ответа
Я не уверен, почему левая кнопка мыши не работает, но вот стиль, который я использую для отображения ListBox с RadioButtons. Он отлично работает с правой и левой мышью
<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 при нажатии на элемент
Ну, это странно! Выбор происходит по правому клику???
Все, что я могу вам предложить, это выбрать подход без событий...
Вы можете использовать шаблон MVVM, привязав свойства SelectedItem / SelectedValue и т. Д.
Также вы можете использовать один режим выбора ListView для автоматического "группирования" переключателей таким образом, чтобы одновременно выбирался ТОЛЬКО один
например, радиокнопки IsChecked
привязан к предку ListViewItem's IsSelected
собственность, двухсторонняя. Таким образом, когда переключатель установлен, он автоматически выберет строку представления списка, и привязка SelectedItem \ Value будет срабатывать автоматически. Находясь в режиме одиночного выбора ListView, следующий щелчок переключателем автоматически отменяет выбор предыдущей строки.