wpf - 如何使用 WPF 中的触发器更改边框颜色?
问题描述
当鼠标悬停他时,我需要更改一个文本框的边框颜色,但是我写的解决方案不起作用。我的代码有错误吗?背景颜色改变,但边框没有。
下面的代码是我的想法。
<Style x:Key="BorderColor" TargetType="TextBox">
<Setter Property="FontStyle" Value="Normal"/>
<Style.Triggers>
<Trigger Property="TextBox.IsMouseOver" Value="true">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="Background" Value="LightBlue"/>
</Trigger>
</Style.Triggers>
解决方案
一种快速简便的方法是简单地将 TextBox 边框厚度设置为 0 并将其封装在父边框中:
<Border BorderThickness="1" Width="500" Height="20" >
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="BorderBrush" Value="Black" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBox x:Name="theTextBox" BorderThickness="0" />
</Border>
执行此操作的“正确”方法是将整个控件模板化:
<Style TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" TargetName="border" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
推荐阅读
- python - 用于二元分类问题的 CNN 嵌入层 1D
- xcode - 由于 xcodebuild 失败,无法启动 WebDriverAgent:iproxy 以代码“234”退出
- typescript - 本地项目的 npm / yarn 包共享?
- c++ - 静态库 (/MT) 链接与项目 /MTd 选项冲突
- postgresql - Postgresql:创建触发器以增加两个表之间的count_column?
- python - Maya Python - 如何以编程方式在 MASH 上设置输入网格?
- sml - 当使用构造函数时,SML 是否有办法在参数上运行函数?
- ios - INIntent 子类真的需要 iOS 12 吗?
- c# - 仅当 C#/ASP.NET MVC 应用程序在 Chrome 上在线(IIS 8.5)时出现 404 错误
- websphere - 在 websphere 9 上设置 Parent_Last