我是WPF的新手,我目前正在使用triggers
。我有一个关于简单触发器的问题。通过简单触发器,我的意思是监视dependency property
中的更改并使用setter
来更改样式。
示例:
<Style.Triggers>
<Trigger Property="Control.IsFocused" Value ="True">
<Setter Property=" Control.Foreground" Value =" DarkRed" />
</Trigger>
</Style.Triggers>
我见过的所有示例都使用了以下trigger properties
:
<Trigger Property="Control.IsFocused" Value ="True">
<Trigger Property="Control.IsMouseOver" Value ="True">
<Trigger Property="Button.IsPressed" Value ="True">
问题: 这些仅触发器属性是否可用?如果没有,其他人存在什么?
我在网上搜索但无济于事。也许有人可以对此有所了解。
答案 0 :(得分:13)
这些不是您在Triggers
中可以使用的唯一属性,但是,它们是常见示例,因为它们易于理解且易于演示。
事实上,您可以让Trigger
观看任何DependencyProperty
,但因为当值发生变化时它会被“触发”(并且与Value
匹配,您需要注意) ,只有使用会在运行时更改的属性才有意义,通常来自用户操作(例如焦点,鼠标悬停,按下等)。在这些情况下,只有某些DependencyProperties
实际更改值,因此并非所有这些都在Triggers
中使用。
Microsoft已在标准控件中添加了多个DependencyProperties
,以便您可以根据更改轻松创建触发器。但是,您也可以使用自己的DependencyProperties
创建自己的控件,并在自定义DependencyProperties
更改时触发响应。
请注意,PropertyTriggers
只是WPF中Trigger
的一种风格。还有EventTriggers
和DataTriggers
以及MultiTriggers
。这些其他触发器基于事件或数据更改触发,或者在MultiTriggers
多个属性(或数据)值的情况下触发。
您是否正在尝试使用Triggers
? This other answer为每种类型的触发器提供了很好的解释。
答案 1 :(得分:8)
WPF中有多种类型的触发器,但最常用的两种触发器是常规Triggers
和DataTriggers
两种类型的触发器都会监视某个值,当它更改为与指定的Value
匹配时,它们会应用您的样式设置器。
常规触发器可用于对象的任何依赖属性。除了您指定的更常见的触发属性外,还包括Text
,Visibility
,Background
等属性:IsFocused
,IsMouseOver
和{{ 1}}。
请注意,根据MSDN page about Trigger.Property,如果包含触发器的样式或模板具有IsPressed
属性集
一种简单的方法是记住它,如果你可以绑定属性,你可以在它上面设置一个触发器。
DataTriggers 是监视绑定值而不是依赖属性的触发器。它们允许您观察绑定表达式,并在绑定计算结果等于您的值时作出反应。
例如,您可以在TargetType
或DataTrigger
上设置"{Binding Value}"
。您甚至可以将"{Binding ElementName=MyTextBox, Path=IsChecked}"
与DataTriggers一起使用,例如
Converters
答案 2 :(得分:0)
使用此代码可以更好地体验wpf中的触发器。
<Window x:Class="DataBinding.Trigger2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Trigger2" Height="500" Width="500">
<Window.Resources>
<Style TargetType="Button">
<Style.Setters>
<Setter Property="FontFamily" Value="Tahoma"></Setter>
<Setter Property="FontSize" Value="15"></Setter>
<Setter Property="FontWeight" Value="Bold"></Setter>
<Setter Property="Height" Value="25"></Setter>
<Setter Property="Width" Value="100"></Setter>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="Purple"></Setter>
<Setter Property="Foreground" Value="DarkCyan"></Setter>
<Setter Property="FontFamily" Value="Franklin Gothic"></Setter>
<Setter Property="FontSize" Value="10"></Setter>
<Setter Property="FontWeight" Value="Normal"></Setter>
<Setter Property="Height" Value="50"></Setter>
<Setter Property="Width" Value="200"></Setter>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red"></Setter>
<Setter Property="Foreground" Value="White"></Setter>
<Setter Property="FontFamily" Value="Calibri"></Setter>
<Setter Property="FontSize" Value="25"></Setter>
<Setter Property="FontWeight" Value="Heavy"></Setter>
<Setter Property="Height" Value="100"></Setter>
<Setter Property="Width" Value="400"></Setter>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="Green"></Setter>
<Setter Property="Foreground" Value="Violet"></Setter>
<Setter Property="FontFamily" Value="Times New Roman"></Setter>
<Setter Property="FontSize" Value="20"></Setter>
<Setter Property="FontWeight" Value="Thin"></Setter>
<Setter Property="Height" Value="250"></Setter>
<Setter Property="Width" Value="250"></Setter>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Button>It's a Magic.</Button>