WPF中的触发器/数据触发器如果不再为真,是否会返回到先前状态?

7

阅读MSDN关于DataTrigger的内容时,它说:

表示当绑定的数据满足指定条件时应用属性值或执行操作的触发器。

这意味着

当触发器为真时,将把值更改为所需值。

但是,这是否可以推断出来?

当不再为真时,它会将值返回到先前的值。


我如何得出这个结论的

我做了这个

<Style x:Key="fd" TargetType="SomeControl">
 <Setter Property="Control.Template">
  <Setter.Value>
   <ControlTemplate>
    <Button Content="Foo" x:Name="mybutton">
    <ControlTemplate.Triggers>
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=FooProperty}" 
                  Value="Collapsed">
      <Setter Property="IsEnabled" Value="False" TargetName="mybutton"/>
      <Setter Property="Opacity" Value="0.5" TargetName="mybutton"/>
     </DataTrigger>
    </ControlTemplate.Triggers>
   </ControlTemplate>
  </Setter.Value>
 </Setter>
</Style>

FooProperty变为折叠状态时,它会将mybutton的IsEnabled更改为FalseOpacity更改为0.5
现在,当FooProperty变为可见状态时,它会将mybutton的IsEnabled更改为TrueOpacity更改为1,即使我没有编写任何触发器来恢复先前的值。
这是DataTrigger的内置功能吗?可以在不再为真时恢复到先前的值吗?
如果是,是否有任何Microsoft/MSDN文档来证明这一点?
1个回答

6

你所说的是正确的。

关于实际文档以证明这一点,请从此处搜索:

http://msdn.microsoft.com/en-us/library/ms745683.aspx

http://msdn.microsoft.com/en-us/library/system.windows.trigger.aspx

"Remarks section"

WPF定义了与最终用户操作相对应的属性,例如IsMouseOver属性, 当用户将光标悬停在UIElement上或ContentElement的相应IsMouseOver属性之上时, 该属性设置为true。使用属性值表示最终用户操作以及Trigger元素, 允许WPF样式根据这些最终用户操作更改属性值,所有这些都可以在标记中完成。

由触发器更改的属性会在不再满足触发条件时自动重置为其先前值。 触发器针对预期更改并返回原始状态的瞬态状态进行优化, 例如按钮上的IsPressed和ListBoxItem上的IsSelected。感兴趣的属性必须是依赖属性。

请注意,必须为触发器指定Property和Value属性,以使触发器有意义。 如果一个或两个属性未设置,则会引发异常。

祝好运 :)


如何避免重置? - huang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接