Trigger触发器

这篇文章介绍了WPF中用于改变控件样式的触发器,包括单一条件的Trigger、多条件的MultiTrigger、数据绑定触发器DataTrigger以及事件触发器EventTrigger。通过这些触发器,可以实现当鼠标悬停、焦点变化、数据值匹配或特定事件发生时,动态修改控件的属性,如字体大小、背景色、前景色等,并展示了使用Storyboard进行动画效果的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Trigger触发器

<Window.Resources>
	<!--- TargetType:表示作用在什么标签 -->
	<Style x:Key="ButtonStyle" TargetType="TextBox">
		<Setter Property="FontSize" Value="22"></Setter>
		<Setter Property="Background" Value="Yellow"></Setter>
		<Setter Property="Foreground" Value="Blue"></Setter>
		
		<!--- Style.Triggers:属性触发器 -->
		<Style.Triggers>
			<!--- 表示鼠标进入时触发  -->
			<Trigger Property="IsMouseOver" Value="true">
				<Setter Property="Foreground" Value="White"></Setter>
			</Trigger>
			<!--- MultiTrigger 多条件触发器 -->
			<MultiTrigger>
				<!--- 触发器条件集合 -->
				<MultiTrigger.Conditions>
					<Condition Property="IsMouseOver" Value="true"></Condition>
					<Condition Property="IsFocused" Value="true"></Condition>
				</MultiTrigger.Conditions>
				<!--- 触发器样式 -->
				<MultiTrigger.Setters>
					<Setter Property="Background" Value="Brown"></Setter>
				</MultiTrigger.Setters>
			</MultiTrigger>
			
			<!-- 数据触发器 -->
			<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=Self},Path=Text}" Value="123">
				<Setter Property="Background" Value="Orange"></Setter>
			</DataTrigger>
			<!-- 多条件数据触发器 -->
			<MultiDataTrigger>
				<!-- 数据触发器条件集合 -->
				<MultiDataTrigger.Conditions>
					<!-- 触发条件 -->
					<Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self},Path=Text}" Value="123"></Condition>
				</MultiDataTrigger.Conditions>
				<!-- 数据触发器样式 -->
				<MultiDataTrigger.Setters>
					<Setter Property="FontSize" Value="32"></Setter>
				</MultiDataTrigger.Setters>
			</MultiDataTrigger>
			
			<!-- 事件触发器 -->
              <!-- 鼠标进入事件-->
              <!-- RoutedEvent: 表示和标识路由事件,并声明其特征。 -->
              <EventTrigger RoutedEvent="MouseEnter">
                  <!-- 开始一个故事板,并将其动画分发到它们的目标对象和属性。 -->
                  <BeginStoryboard>
                      <!-- 故事板 :用时间轴控制动画,并为其子动画提供对象和属性目标信息。-->
                      <Storyboard>
                          <!-- 在指定的 Duration 上使用线性内插对两个目标值之间的 Double 属性值进行动画处理。 -->
                          <!-- To: 动画从动画属性的基值或以前的动画的输出值进度到属性指定的 To 值。 -->
                          <!-- Duration: 获取或设置此时间线播放的时间长度,而不是计数重复。 -->
                          <!-- AccelerationRatio: 该值指定在将时间消逝从零加速到其最大速率的过程中所占用时间线的 Duration 的百分比。 -->
                          <!-- DecelerationRatio: 该值指定在将时间消逝从其最大速率减速到零的过程中所占用时间线的 Duration 的百分比。 -->
                          <!-- Storyboard.TargetProperty: 获取或设置应进行动画处理的属性。 -->
                          <DoubleAnimation From="50" To="300" Duration="0:0:1.5" 
						        AccelerationRatio="0.10" DecelerationRatio="0.25" 
						        Storyboard.TargetProperty="(TextBox.Width)" />
                      </Storyboard>
                  </BeginStoryboard>
              </EventTrigger>
              <EventTrigger RoutedEvent="MouseLeave">
                  <BeginStoryboard>
                      <Storyboard>
                          <DoubleAnimation From="300" To="50" Duration="0:0:1.5" 
						        AccelerationRatio="0.10" DecelerationRatio="0.25" 
						        Storyboard.TargetProperty="(TextBox.Width)" />
                      </Storyboard>
                  </BeginStoryboard>
              </EventTrigger>

		</Style.Triggers>
	</Style>
</Window.Resources>

<StackPanel>
	<!-- 使用样式 -->
	<TextBox Style="{StaticResource ButtonStyle}"></TextBox>
	<TextBox ></TextBox>
</StackPanel>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值