ListView с RadioButtons запускает / поднимает SelectionChanged ТОЛЬКО при щелчке правой кнопкой мыши (нужно щелкнуть левой кнопкой мыши) - PullRequest
1 голос
/ 12 октября 2011

У меня есть следующий шаблон 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 срабатывает, когда я нажимаю ВНЕШНЮЮ кнопку переключателя (исвязанный с ним текст) на левый клик.Как будто переключатель работает независимо от списка.Событие SelectionChanged возникает при щелчке правой кнопкой мыши по элементу переключателя.Странно, все еще пытаюсь понять это.

Ответы [ 2 ]

0 голосов
/ 12 октября 2011

Я не уверен, почему левая кнопка мыши не работает, но вот стиль, который я использую для отображения 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 как обработанное при нажатии на элемент

0 голосов
/ 12 октября 2011

Ну, это странно!Выбор происходит по правому клику ???

Все, что я могу предложить вам, - это использовать подход без событий ...

Вы можете использовать шаблон MVVM, связывая свойства SelectedItem / SelectedValue и т. Д.

Также вы можете использоватьрежим одиночного выбора ListView для автоматического «группирования» переключателей таким образом, что в один момент времени выбирается ТОЛЬКО одна

, например, IsChecked радиокнопки, привязанная к свойству IsSelected предка ListViewItem, двусторонняя.Таким образом, когда переключатель установлен, он автоматически выберет строку представления списка, и привязка SelectedItem \ Value будет срабатывать автоматически.Находясь в режиме одиночного выбора ListView, следующий щелчок переключателем автоматически отменяет выбор предыдущей строки.

...