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更改IsEnabledFalseOpacity0.5

现在,当FooProperty它变得可见时,它会将 mybutton 更改IsEnabledTrueOpacity1即使我没有编写任何触发器来恢复到以前的值。

DataTrigger当它不再是真的时,这是恢复到以前的值的内置功能吗?

如果是,是否有任何 Microsoft/MSDN 文档可以证明这一点?

4

1 回答 1

6

你说的,是对的。

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

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

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

“备注部分”

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

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

请注意,您必须在触发器上同时指定 Property 和 Value 属性,触发器才有意义。如果未设置其中一个或两个属性,则会引发异常。

祝你好运 :)

于 2012-09-19T07:14:54.617 回答