触发器和数据触发器有什么区别?

55

它们看起来一样。但它们之间有显著的区别吗?我觉得我漏掉了什么。


这个回答解决了你的问题吗?WPF中有哪些不同的触发器? - StayOnTarget
3个回答

58

普通的 Trigger 只响应依赖属性。

DataTrigger 可以通过设置其 Binding 属性来触发任何 .NET 属性。但是,它的 setter 仍然只能指定依赖属性。


10
如果这是唯一的区别,那么为什么会有人使用常规扳机? - Romain Hautefeuille
当你绑定 View 中的属性时,触发器(Trigger)会更方便使用。 - Sean U
2
@SeanU 为什么,哪个更方便? - Hugh W

33
另一个不同之处在于,DataTrigger可以绑定到另一个控件、StaticResource等等。
<Style TargetType="TextBox">
  <Style.Triggers>
    <DataTrigger 
      Binding="{Binding SomeProperty, 
                        ElementName=someOtherControl" 
      Value="Derp">
      <!-- etc -->

只有在使用 Trigger 时才能检查样式所设置的实例。例如,应用于按钮的 Trigger 可以检查 IsPressed 的值,但如果您希望在同一表单上禁用 Button 如果TextBox为空,则无法检查(例如)Text值。

19
短而简单的回答(因为我马上就要睡觉了)——触发器适用于依赖属性(通常是GUI属性),而数据触发器可以由任何.NET属性触发(通常是实现INotifyPropertyChanged的ViewModel中的属性)。

1
你醒了吗?我很想听到完整的回答 :) - Hugh W
简而言之,如果您想触发 UI 元素的依赖属性(例如 CheckBox 的 IsEnabled、IsChecked 等)并且该属性在您的视图上,则应使用普通触发器(也称为 PropertyTrigger)。如果您想触发视图模型上的属性,则应使用数据触发器。 - Andrew

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