使用DataTrigger来代替Triggerr

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用DataTrigger来代替Triggerr相关的知识,希望对你有一定的参考价值。

原文:使用DataTrigger来代替Triggerr

普通的Trigger监听鼠标移入的代码如下:

  <Trigger Property="IsMouseOver" Value="true">

      <Setter .../>

  </Trigger>

而MultiTigger想实现,当属性等于某个值,同时鼠标移入时的需求:

    理论上,代码应该如下:

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="True"/>
        <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="False"/>
    </MultiTrigger.Conditions>
    <MultiTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource MouseEnter}"/>
    </MultiTrigger.EnterActions>
    <MultiTrigger.ExitActions>
        <BeginStoryboard Storyboard="{StaticResource MouseLeave}"/>
    </MultiTrigger.ExitActions>
</MultiTrigger>

  但实际运行起来会报如下错误Must have non-null value for ‘Property‘.

 

  所以我们需要转换一种方式,用MultiDataTrigger来实现上述的需求:

   代码如下:

    <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
                    <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsChecked}" Value="True"/>
                </MultiDataTrigger.Conditions>
                <Setter TargetName="LayoutRoot" Property="Background" Value="Red"/>
            </MultiDataTrigger>

**将Trigger中的
 <Condition Property="IsMouseOver" Value="True"/> 转换成DataTrigger中的
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True"/>
来实现我们的需求

 




以上是关于使用DataTrigger来代替Triggerr的主要内容,如果未能解决你的问题,请参考以下文章

在 Expression Blend 2013 中添加 DATATRIGGER 的可视化方式

消除重复的 DataTrigger 逻辑

如何将参数传递给 DataTrigger?

WPF ItemsControl DataTrigger EnterActions动画未启动

如何使用 Binding="Binding" 以编程方式创建 DataTrigger?

无法通过 DataTrigger 设置 ContentTemplate