Как обрабатывать триггер стиля ListBoxItem на мыши, захваченной в WPF - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть список, содержащий некоторые элементы с шаблоном. Элементы создаются во время выполнения. Шаблон запускает масштабную анимацию, когда мышь находится над ListBoxItem. Я хотел бы изменить фон элемента, когда пользователь щелкает элемент. Код ниже не работает, потому что я считаю, что IsMouseCaptured (click) обрабатывается селектором списка. Любые идеи, как я могу сделать все это в коде XAML?

<ControlTemplate.Triggers>
        <Trigger Property="IsMouseCaptured" Value="True">
            <Setter TargetName="rec" Property="Fill" Value="Black" />
        </Trigger>    
</ControlTemplate.Triggers>

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

Когда пользователь щелкает элемент в списке, он выбирается, поэтому ваш триггер должен работать с IsSelected-Property.

Создайте стиль для вашего ListBoxItem, поместите Trigger в IsSelected-Property и установите этот стиль как ItemContainerStyle.

0 голосов
/ 02 марта 2011

Как сказал Сокол, вы можете использовать события для своей задачи.Это можно сделать даже в XAML, например:

<EventTrigger RoutedEvent="MouseDown" >
    <EventTrigger.Actions>                      
        <BeginStoryboard x:Name="ClickBackground">
            <Storyboard>
                <ObjectAnimationUsingKeyFrames 
                    Duration="0" FillBehavior="HoldEnd"
                    Storyboard.TargetName="rec"
                    Storyboard.TargetProperty="Fill">
                    <DiscreteObjectKeyFrame KeyTime="0">
                        <DiscreteObjectKeyFrame.Value>
                            <SolidColorBrush Color="Black" />
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>                           
                </ObjectAnimationUsingKeyFrames>                                
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseUp" >
    <EventTrigger.Actions>                      
        <StopStoryboard BeginStoryboardName="ClickBackground" />
    </EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave" >
    <EventTrigger.Actions>                      
        <StopStoryboard BeginStoryboardName="ClickBackground" />
    </EventTrigger.Actions>
</EventTrigger>
...