【问题标题】:How can I resolve property conflicts in WPF when using Triggers?使用触发器时如何解决 WPF 中的属性冲突?
【发布时间】:2016-11-13 19:00:56
【问题描述】:

我正在尝试更改按钮的背景,但问题是它具有三种状态 - IsEnabled、IsPressed 和 Clicked。在默认状态下,当我按下按钮时,背景会发生变化,然后当我单击按钮时,按钮会动画,但下次按下按钮时,背景不会改变,但 Click(动画)可以正常工作,因为有更改相似资源时发生冲突。

这是我的源代码

<Style TargetType="{x:Type Button}" x:Key="myButton">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Name="myBorder"  VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Name="Stack" Background="DarkGray">
                             <Image x:Name="checkBoxImage" Width="40" Height="40" Source="NextPage.png"/>
                        </StackPanel>
                </Border>
                <ControlTemplate.Triggers>
                    <EventTrigger RoutedEvent="Click">
                        <BeginStoryboard>
                            <Storyboard>
                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Stack" Storyboard.TargetProperty="Background">
                                    <ObjectAnimationUsingKeyFrames.KeyFrames>
                                        <DiscreteObjectKeyFrame Value="Blue1"  KeyTime="0" />
                                        <DiscreteObjectKeyFrame Value="DarkGray1" KeyTime="0:0:0.4" />
                                    </ObjectAnimationUsingKeyFrames.KeyFrames>
                                </ObjectAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="Stack" Property="Background" Value="Red" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

【问题讨论】:

    标签: wpf xaml properties wpf-controls event-triggers


    【解决方案1】:

    这看起来像是一个优先问题。动画优先于触发器设置的值。您可以将触发器的设置器替换为添加到 Enter/ExitActions 的动画,或者尝试使用 visual states 并以这种方式管理转换(这可能效果更好,因为您真的不知道 ExitAction 应该在所有情况)。

    【讨论】:

      猜你喜欢
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2013-02-16
      • 2019-12-22
      • 2016-01-12
      相关资源
      最近更新 更多