如何将 FocusVisualStyle 应用于控件

此示例演示如何使用 FocusVisualStyle 属性在资源中创建焦点视觉样式并将样式应用于控件。

示例:

以下示例定义了一个样式,该样式创建了额外的控件合成,仅在该控件在用户界面(UI)中获得键盘焦点时适用。 这是通过定义具有 ControlTemplate的样式来实现的,然后在设置 FocusVisualStyle 属性时将该样式引用为资源。

与边框相同的外部矩形放置在矩形区域之外。 除非另有修改,否则调整样式大小时将使用应用焦点视觉样式的矩形控件的 ActualHeightActualWidth。 本示例设置 Margin 的负值,以使边框在焦点控件外略显。

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
  <Page.Resources>
    <Style x:Key="MyFocusVisual">
      <Setter Property="Control.Template">
        <Setter.Value>
          <ControlTemplate>
            <Rectangle Margin="-2" StrokeThickness="1" Stroke="Red" StrokeDashArray="1 2"/>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Page.Resources>
  <StackPanel Background="Ivory" Orientation="Horizontal">
    <Canvas Width="10"/>
    <Button Width="100" Height="30" FocusVisualStyle="{DynamicResource MyFocusVisual}">
      Focus Here</Button>
    <Canvas Width="100"/>
    <Button Width="100" Height="30" FocusVisualStyle="{DynamicResource MyFocusVisual}">
      Focus Here</Button>
  </StackPanel>
</Page>

FocusVisualStyle 是对任何来自显式样式或主题样式的控件模板样式的补充。仍然可以使用 ControlTemplate 创建控件的主要样式,并将该样式设置为 Style 属性。

焦点视觉样式应在主题或 UI 中一致地使用,而不是为每个可聚焦元素使用不同的样式。 有关详细信息,请参阅为控件中的焦点设置样式以及 FocusVisualStyle

另请参阅