在 Windows7(也可能是 vista)中,文本框现在在接收输入焦点或获得 MouseOver 时会获得蓝色强调矩形。
在我的 WPF 应用程序中,蓝色焦点矩形确实非常突出 - 它与应用程序其余部分的视觉风格不匹配。
如何禁用它 - 或者更好的是,自定义它?
(在 xaml 中将 FocusVisualStyle 设置为 {x:Null} 不会执行任何操作。)
最佳答案
这是因为文本框应用了默认样式。要修改此行为,您必须创建自定义样式/模板。看看这个示例
<Style x:Key="TextBoxStyle1" BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<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="border" Background="#FF8F8F8F" BorderBrush="#FF585858" CornerRadius="3" BorderThickness="2">
<ScrollViewer x:Name="PART_ContentHost" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" TargetName="border" Value="Silver"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" TargetName="border" Value="0.15"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderBrush" TargetName="border" Value="Silver"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
关于Windows7 上的 WPF 文本框边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8328333/