【问题标题】:Highlight a WPF control when it gets focus获得焦点时突出显示 WPF 控件
【发布时间】:2012-06-17 03:20:04
【问题描述】:

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

所以我想突出显示当前关注它的控件。它可以是文本框、按钮、组合框、列表框或网格。

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

谢谢

【问题讨论】:

    标签: c# wpf resourcedictionary


    【解决方案1】:

    您应该为正确的事件使用触发器。在您的情况下,它是IsFocused。简单例子:

    <Trigger Property="IsFocused" Value="true">
        <Setter Property="BorderBrush" Value="Red" />
        <Setter Property="BorderThickness" Value="1" />
    </Trigger>
    

    您应该使用Style 标记,如果您想将此样式应用于特定 控件类型(例如,使用TargetType="{x:Type TextBox}")。

    如果您想应用到应用程序中的所有控件类型,那么您应该考虑使用仅具有此类触发器的基本样式,而不是在自定义样式中继承它BasedOn 属性: &lt;Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseFocusStyle}"&gt;

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您也可以尝试为此行为创建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?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-22
          • 1970-01-01
          • 2016-04-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多