Control.UseSystemFocusVisuals 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指示控件是使用系统绘制的焦点视觉对象还是控件模板中定义的视觉对象。
public:
property bool UseSystemFocusVisuals { bool get(); void set(bool value); };
bool UseSystemFocusVisuals();
void UseSystemFocusVisuals(bool value);
public bool UseSystemFocusVisuals { get; set; }
var boolean = control.useSystemFocusVisuals;
control.useSystemFocusVisuals = boolean;
Public Property UseSystemFocusVisuals As Boolean
属性值
Boolean
bool
如果控件使用系统绘制的焦点视觉对象,则为 true;如果控件使用 ControlTemplate 中定义的焦点视觉对象,则为 false。 默认值为 false;请参阅备注。
示例
此示例演示一个为 Button 定义自定义焦点视觉对象的 ControlTemplate。
不会显示控件模板的某些元素,使相关部分更加清晰。
<Style TargetType="Button">
<!-- Set UseSystemFocusVisuals to false. -->
<Setter Property="UseSystemFocusVisuals" Value="False"/>
...
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="PointerOver">
...
</VisualState>
</VisualStateGroup>
<!-- Add VisualStateGroup for FocusStates. -->
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<DoubleAnimation Storyboard.TargetName="FocusVisualWhite"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0"/>
<DoubleAnimation Storyboard.TargetName="FocusVisualBlack"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
<VisualState x:Name="PointerFocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="Border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Margin="3">
<ContentPresenter x:Name="ContentPresenter"
Content="{TemplateBinding Content}"
ContentTransitions="{TemplateBinding ContentTransitions}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
AutomationProperties.AccessibilityView="Raw"/>
</Border>
<!-- Add elements for focus visuals. -->
<Rectangle x:Name="FocusVisualWhite"
IsHitTestVisible="False"
Stroke="{ThemeResource FocusVisualWhiteStrokeThemeBrush}"
StrokeEndLineCap="Square"
StrokeDashArray="1,1"
Opacity="0"
StrokeDashOffset="1.5"/>
<Rectangle x:Name="FocusVisualBlack"
IsHitTestVisible="False"
Stroke="{ThemeResource FocusVisualBlackStrokeThemeBrush}"
StrokeEndLineCap="Square"
StrokeDashArray="1,1"
Opacity="0"
StrokeDashOffset="0.5"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
注解
默认情况下,此属性为 false ,以便定义其自己的焦点视觉对象的自定义 ControlTemplate 按预期工作。 但是,所有 XAML 框架控件在其 ControlTemplate 中将此属性设置为 true,并使用系统绘制的焦点视觉对象。
若要为控件定义自定义焦点视觉对象,需要提供自定义 ControlTemplate。 在 ControlTemplate 中执行以下操作:
- 如果要修改默认 的 ControlTemplate,请务必将 UseSystemFocusVisuals 属性设置为 false 以关闭系统焦点视觉对象。 设置为 false 时,将调用 VisualStateManager 中的焦点状态。
- 为
FocusStates
定义 VisualStateGroup。 - 在
FocusStates
组中,为Focused
、Unfocused
和PointerFocused
定义 VisualState。 - 定义焦点视觉对象。