IsEnabled="False" 状态的 WPF 文本框未应用正确的背景颜色
Posted
技术标签:
【中文标题】IsEnabled="False" 状态的 WPF 文本框未应用正确的背景颜色【英文标题】:WPF TextBox in IsEnabled="False" state is not applying correct background color 【发布时间】:2017-08-01 21:39:52 【问题描述】:当我的文本框被禁用时,我在将颜色应用到文本框时遇到问题,
acctualy 我有数据网格,我用"#E0E4E5"
颜色为行着色。我想在我的文本框被禁用时保留它的颜色,比如行的颜色是 ("#E0E4E5"
)。
接下来我做的是:
我将属性设置为行AlternatingRowBackground="#E0E4E5"
,然后我将此颜色作为行的背景颜色。
在那之后,我为我的文本框制作了样式,因为 wpf 中的默认样式看起来不太好,它有一些阴影等,所以这是我为文本框自定义的样式:
<Style x:Key="TextBoxStyle1" TargetType="x:Type TextBox">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="#E0E4E5" />
<Setter Property="BorderBrush" Value="#E0E4E5" />
<Setter Property="BorderThickness" Value="1.5" />
</Trigger>
</Style.Triggers>
<Setter Property="BorderBrush" Value="#0091EA"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="DynamicResource x:Static SystemColors.WindowTextBrushKey"/>
<Setter Property="Background" Value="DynamicResource x:Static SystemColors.WindowBrushKey"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="FocusVisualStyle" Value="x:Null"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type TextBox">
<Border x:Name="Bd" BorderBrush="TemplateBinding BorderBrush" BorderThickness="TemplateBinding BorderThickness"
Background="TemplateBinding Background" SnapsToDevicePixels="True">
<ScrollViewer x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="DynamicResource x:Static SystemColors.ControlBrushKey"/>
<Setter Property="Foreground" Value="DynamicResource x:Static SystemColors.GrayTextBrushKey"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
正如你所看到的,有一段代码(触发器)说好的,当你被禁用时,让你的背景颜色是这样的,而边框是这样的:
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="#E0E4E5" />
<Setter Property="BorderBrush" Value="#E0E4E5" />
<Setter Property="BorderThickness" Value="1.5" />
</Trigger>
</Style.Triggers>
所以这里是它的外观示例:
可能会看到我对它们都应用了相同的颜色“#E0E4E5”,但不知不觉它们是不同的,所以当我的文本框禁用它成为“#E0E4E5”
我还必须注意,如果我更改边框画笔的颜色,它会起作用。例如,当它们被禁用时,我将它们都设置为文本框并将边框刷设置为红色,我得到了这个:
所以边框画笔改变了,但背景没有。
谢谢各位, 干杯
【问题讨论】:
【参考方案1】:删除ControlTemplate
中的Setter
,当TextBox
被禁用时将Background
设置为SystemColors.ControlBrushKey
:
<Style x:Key="TextBoxStyle1" TargetType="x:Type TextBox">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="#E0E4E5" />
<Setter Property="BorderBrush" Value="#E0E4E5" />
<Setter Property="BorderThickness" Value="1.5" />
</Trigger>
</Style.Triggers>
<Setter Property="BorderBrush" Value="#0091EA"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="DynamicResource x:Static SystemColors.WindowTextBrushKey"/>
<Setter Property="Background" Value="DynamicResource x:Static SystemColors.WindowBrushKey"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="FocusVisualStyle" Value="x:Null"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type TextBox">
<Border x:Name="Bd" BorderBrush="TemplateBinding BorderBrush" BorderThickness="TemplateBinding BorderThickness"
Background="TemplateBinding Background" SnapsToDevicePixels="True">
<ScrollViewer x:Name="PART_ContentHost"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="DynamicResource x:Static SystemColors.GrayTextBrushKey"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
【讨论】:
当我看到 wpf 上帝在评论时,我知道会有非常棒的观察。非常感谢人! :)以上是关于IsEnabled="False" 状态的 WPF 文本框未应用正确的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章
使用imageView外观禁用UIButton而不将isEnabled设置为false
当控件的 IsEnabled 为 false 时如何设置通常的背景 [关闭]
WPF IsEnabled 和 IsHitTestVisible
使带有 imageView 的 UIButton 看起来被禁用而不将 isEnabled 设置为 false