Как обрабатывать триггер стиля ListBoxItem для мыши, захваченный в WPF

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

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

person Edgar    schedule 08.11.2010    source источник


Ответы (2)


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

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

person Falcon    schedule 08.11.2010
comment
Это звучит разумно, чтобы исправить цвет фона, если элемент выбран. Но то, что я хотел бы сделать, это установить цвет фона только до тех пор, пока левая кнопка мыши нажата, то есть имитируя поведение кнопки. Любые идеи? - person Edgar; 08.11.2010
comment
вам нужно отменить выбор в MouseUp EventHandler. В остальном я не вижу никаких шансов. - person Falcon; 09.11.2010

Как сказал Фалькон, вы можете использовать события для своей задачи. Это можно сделать даже чисто в 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>
person Jens    schedule 02.03.2011