5

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

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

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

谢谢

4

3 回答 3

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}">

如何做到这一点的一个很好的例子是一个 SO 问题:“如何使 Style.Triggers 触发要应用的不同命名样式”。

于 2012-06-14T06:01:28.420 回答
0

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

于 2012-06-14T06:01:47.110 回答
0

您也可以尝试为此行为创建一个装饰器;如果您愿意使用第 3 方开源库,请查看 codeplex 上的此实现,您还可以通过代码了解如何实现自己的装饰器 -

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

在此处输入图像描述

另一个类似的问题有关于其他解决方案的详细信息 -可重用的方式在当前关注的任何元素周围放置一个鲜红色的框?

于 2012-06-14T06:42:05.610 回答