WPF触发器属性
我是WPF的新手,目前正在与之合作。我有一个关于简单触发器的问题。我所说的简单触发器,是指监视a中的更改并使用a来更改样式的触发器 例如:WPF触发器属性,wpf,xaml,properties,triggers,Wpf,Xaml,Properties,Triggers,我是WPF的新手,目前正在与之合作。我有一个关于简单触发器的问题。我所说的简单触发器,是指监视a中的更改并使用a来更改样式的触发器 例如: <Style.Triggers> <Trigger Property="Control.IsFocused" Value ="True"> <Setter Property=" Control.Foreground" Value =" DarkRed" /> </Trigger>
<Style.Triggers>
<Trigger Property="Control.IsFocused" Value ="True">
<Setter Property=" Control.Foreground" Value =" DarkRed" />
</Trigger>
</Style.Triggers>
我看到的所有示例都使用了以下内容:
我在网上搜索过,但没有结果。也许有人可以解释一下这一点。WPF中有多种类型的触发器,但最常用的两种是常规的
触发器和数据触发器
这两种类型的触发器都将监视一个值,当它更改为与指定的值匹配时,它们将应用样式设置器
常规触发器可用于对象的任何依赖项属性。除了您指定的更常见的触发属性之外,还包括诸如文本
、可见性
、背景
等属性:IsFocused
、IsMouseOver
和IsPressed
请注意,根据,如果包含触发器的样式或模板具有其TargetType
属性集,则不需要指定类名前缀
记住它的一个简单方法是,如果可以绑定属性,就可以在其上设置触发器
DataTriggers是监视绑定值而不是依赖属性的触发器。它们允许您观察绑定表达式,并在该绑定的计算结果等于您的值时作出反应
例如,您可以在“{Binding Value}”或“{Binding ElementName=MyTextBox,Path=IsChecked}”上设置DataTrigger
。您甚至可以将转换器
与数据触发器一起使用,例如
<DataTrigger
Binding="{Binding SomeInt, Converter={StaticResource IsGreaterThanZero}}"
Value="True">
这些属性不是您可以在触发器中使用的唯一属性,但是,它们是常见的示例,因为它们易于理解和演示
事实上,您可以让您的触发器
监视任何依赖属性
,但因为它在值更改时被“触发”(并且与您告诉它要监视的值匹配),所以只有在运行时使用将更改的属性才有意义,通常是从用户操作(例如焦点、鼠标悬停、按下等)开始。在这些情况下,只有某些dependencProperties
实际更改值,因此并非所有属性都可以在触发器中使用
Microsoft在标准控件中添加了几个dependencProperties
,以便您可以根据更改轻松创建触发器。但是,您也可以使用自己的dependencProperties
创建自己的控件,并在自定义dependencProperties
更改时使用触发器进行响应
请记住,PropertyTriggers
只是WPF中的Trigger
的一种风格。还有事件触发器
和数据触发器
和多触发器
。这些其他触发器根据事件或数据变化触发,或者在多触发器
多个属性(或数据)值的情况下触发
您是否正在尝试使用触发器执行某些特定操作?为每种类型的触发器提供了一个很好的解释。使用此代码可以更好地体验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>
这是一种魔力。
所以对于常规触发器,没有类似于Control.IsMouseDown
?@Dom我刚刚在我的答案中添加了一个更新。如果在包含触发器的样式或模板上设置了TargetType
属性,则不需要在触发器属性上包含类名前缀。因此,如果您的TargetType
具有IsMouseDown
属性,那么您可以在IsMouseDown
上设置触发器,而不是使用控件。IsMouseDown
不要忘记EventTriggers
。我在回答中忘记了EventTriggers
和多触发器
,因为我几乎从未使用过它们。谢谢你提醒我!:):)。同意@Rachel,EventTriggers
远不常见。我可能只用过几次。