在获得焦点时突出显示WPF控件

时间:2012-06-14 05:35:49

标签: c# wpf resourcedictionary

我正在开发一个有很多屏幕的WPF应用程序,每个屏幕都有很多控件。 它很难确定哪个控件具有焦点。

所以我想强调一下目前关注它的控件。它可以是文本框,按钮,组合框,列表框或网格。

如果我们能够使用样式和触发器做到这一点会更好。

由于

3 个答案:

答案 0 :(得分:8)

您应该为正确的事件使用触发器。在你的情况下它是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}">

如何做到这一点的好例子是一个问题:“How to make Style.Triggers trigger a different named style to be applied”。

答案 1 :(得分:0)

我建议在每个控件的自定义样式中使用视觉状态。所有标准控件都将支持此视觉状态。例如,查看button的MSDN样式,您会注意到Focused的可视状态。 This MSDN文章也可能对您有所帮助。

答案 2 :(得分:0)

您还可以尝试为此行为创建adorner;如果你打开使用第三方开源库,那么看看codeplex上的这个实现,你也可以通过代码来了解如何实现你自己的装饰 -

http://uiannotations.codeplex.com/wikipage?title=Adorners&referringTitle=Documentation

  

enter image description here

另一个类似的问题,其中包含其他解决方案的详细信息 - Reusable way to put a bright red box around whatever element currently has focus?