我正在开发一个有很多屏幕的 WPF 应用程序,每个屏幕上都有很多控件。确定哪个控件具有焦点变得非常困难。
所以我想突出显示当前关注它的控件。它可以是文本框、按钮、组合框、列表框或网格。
如果我们可以使用样式和触发器来做到这一点会更好。
谢谢
我正在开发一个有很多屏幕的 WPF 应用程序,每个屏幕上都有很多控件。确定哪个控件具有焦点变得非常困难。
所以我想突出显示当前关注它的控件。它可以是文本框、按钮、组合框、列表框或网格。
如果我们可以使用样式和触发器来做到这一点会更好。
谢谢
您应该为正确的事件使用触发器。在你的情况下,它是IsFocused
. 简单的例子:
<Trigger Property="IsFocused" Value="true">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="1" />
</Trigger>
Style
如果要将此样式应用于特定控件类型(TargetType="{x:Type TextBox}"
例如,使用 ),则应使用标记。
如果您想应用于应用程序中的所有控件类型,那么您应该考虑使用只有这种触发器的基本样式,而不是在BasedOn
属性的帮助下在自定义样式中继承它:
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseFocusStyle}">
如何做到这一点的一个很好的例子是一个 SO 问题:“如何使 Style.Triggers 触发要应用的不同命名样式”。
您也可以尝试为此行为创建一个装饰器;如果您愿意使用第 3 方开源库,请查看 codeplex 上的此实现,您还可以通过代码了解如何实现自己的装饰器 -
http://uiannotations.codeplex.com/wikipage?title=Adorners&referringTitle=Documentation
另一个类似的问题有关于其他解决方案的详细信息 -可重用的方式在当前关注的任何元素周围放置一个鲜红色的框?