Некоторые события в стиле ListBoxItem не запускаются - PullRequest
0 голосов
/ 06 июня 2018

У меня есть список, привязка к коллекции моего пользовательского объекта MyNode, и я хочу установить два события, Drop и MouseRightButtonDown.У списка есть пользовательский элемент управления и стиль.

Стиль моего ListBoxItem выглядит следующим образом:

<UserControl.Resources>
    <Style TargetType="{x:Type ListBoxItem}" x:Key="pinnedListBoxStyle">
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                        <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Background" Value="#EEF6FC"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter Property="Background" TargetName="Bd" Value="#74B4E4"/>
                        </Trigger>
                    </ControlTemplate.Triggers>                        
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <EventSetter Event="Drop" Handler="ListBoxItem_Drop"/>
        <EventSetter Event="MouseRightButtonDown" Handler="ListBoxItem_MouseRightButtonDown"/>
    </Style>
</UserControl.Resources>

И я использую список с пользовательским элементом управления, например:

    <ListBox SelectionMode="Single" Focusable="True" IsSynchronizedWithCurrentItem="True" AllowDrop="True" 
                 ItemContainerStyle="{StaticResource pinnedListBoxStyle}">
        <ListBox.ItemTemplate>
            <DataTemplate DataType="{x:Type local:MyNode}">
                <local:MyItemTemplate/>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

Проблема:

Один из моих двух обработчиков событий, а именно ListBoxItem_MouseRightButtonDown, никогда не срабатывает, когда я щелкаю правой кнопкой мыши по любому элементу.Другой обработчик ListBoxItem_Drop всегда запускается как задумано.

Не могли бы вы предложить какие-нибудь идеи?

1 Ответ

0 голосов
/ 07 июня 2018

Следуя совету @ Клеменса, использование PreviewMouseRightButtonDown или PreviewMouseRightButtonUp вызовет мои события.

Я сейчас использую:

<Style TargetType="{x:Type ListBoxItem}" ...>
    ...
    <EventSetter Event="PreviewMouseRightButtonDown" Handler="ListBoxItem_MouseRightButtonDown"/>
</Style>
...