【发布时间】:2012-06-17 03:20:04
【问题描述】:
我正在开发一个有很多屏幕的 WPF 应用程序,每个屏幕上都有很多控件。 确定哪个控件具有焦点变得非常困难。
所以我想突出显示当前关注它的控件。它可以是文本框、按钮、组合框、列表框或网格。
如果我们可以使用样式和触发器来做到这一点会更好。
谢谢
【问题讨论】:
标签: c# wpf resourcedictionary
我正在开发一个有很多屏幕的 WPF 应用程序,每个屏幕上都有很多控件。 确定哪个控件具有焦点变得非常困难。
所以我想突出显示当前关注它的控件。它可以是文本框、按钮、组合框、列表框或网格。
如果我们可以使用样式和触发器来做到这一点会更好。
谢谢
【问题讨论】:
标签: c# wpf resourcedictionary
您应该为正确的事件使用触发器。在您的情况下,它是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 问题:“How to make Style.Triggers trigger a different named style to be applied”。
【讨论】:
您也可以尝试为此行为创建adorner;如果您愿意使用第 3 方开源库,请查看 codeplex 上的这个实现,您还可以通过代码了解如何实现自己的装饰器 -
http://uiannotations.codeplex.com/wikipage?title=Adorners&referringTitle=Documentation
另一个类似的问题有关于其他解决方案的详细信息 - Reusable way to put a bright red box around whatever element currently has focus?
【讨论】: