【问题标题】:Datatrigger auto reverse color数据触发器自动反转颜色
【发布时间】:2019-02-22 19:57:24
【问题描述】:

如果属性为真,我想立即将背景颜色更改为红色。然后慢慢恢复为默认背景颜色。

我的第一次尝试,问题:默认颜色会立即出现,并且不会随着时间的推移缓慢恢复

 <DataTrigger Binding="{Binding HasValueChanged}" Value="True">
            <Setter Property="Background" Value="Red" />
        </DataTrigger>
        <DataTrigger Binding="{Binding HasValueChanged}" Value="False">
            <DataTrigger.EnterActions>
                <BeginStoryboard>
                    <Storyboard>
                        <ColorAnimation  Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" Duration="0:0:5" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
        </DataTrigger>

我的第二次尝试,问题:颜色反转正常,但如果属性保持为真,则永远不会再变红

<DataTrigger Binding="{Binding HasValueChanged}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation To="Red" AutoReverse="True"  Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" Duration="0:0:5" />
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>

【问题讨论】:

    标签: c# wpf datatrigger wpf-style


    【解决方案1】:

    只要您不将 Timeline 的 FillBehavior 设置为 Stop,它就会一直保持最终的属性值,直到被另一个 Timeline 替换。

    所以这行得通:

    <DataTrigger Binding="{Binding HasValueChanged}" Value="True">
        <DataTrigger.EnterActions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Storyboard.TargetProperty="Background.Color"
                                    To="Red" Duration="0"/>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.EnterActions>
        <DataTrigger.ExitActions>
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Storyboard.TargetProperty="Background.Color"
                                    From="Red" Duration="0:0:1"/>
                </Storyboard>
            </BeginStoryboard>
        </DataTrigger.ExitActions>
    </DataTrigger>
    

    【讨论】:

    • 谢谢,这成功了。除了之前的 IsFocused 触发器等也会改变背景颜色,当 HasValueChanged 保持为真时会杀死这个动画,这很奇怪。我目前的解决方法是手动将 HasValueChanged 设置为 false 并将其设置回 true,但这似乎不是一个好的解决方案。
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 2020-02-20
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多