WPF设置控件获取键盘焦点时的样式FocusVisualStyle

Posted 一菲聪天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF设置控件获取键盘焦点时的样式FocusVisualStyle相关的知识,希望对你有一定的参考价值。

控件获取焦点除了用鼠标外,可以通过键盘来获取,比如Tab键或者方向键等,需要设置控件获取键盘焦点时的样式,可以通过设置FrameworkElemnt.FocusVisualStyle属性,

因为几乎所有常用的控件都继承了FrameworkElement,所以绝大部分控件都拥有该属性

        // Summary:
        //     Gets or sets a property that enables customization of appearance, effects,
        //     or other style characteristics that will apply to this element when it captures
        //     keyboard focus. This is a dependency property.
        //
        // Returns:
        //     The desired style to apply on focus. The default value as declared in the
        //     dependency property is an empty static System.Windows.Style. However, the
        //     effective value at run time is often (but not always) a style as supplied
        //     by theme support for controls.
        public Style FocusVisualStyle { get; set; }    
huangcongde

     通过以上代码可以看到,FocusVisualStyle就是Style类型的属性,所以可以这样:

<Window x:Class="FocusVisualStyleDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <!--将获取焦点的样式设置为红色边框-->
        <Style x:Key="newFocusStyle">
            <Setter Property="Control.Template">
                <Setter.Value>
                    <ControlTemplate>
                        <Rectangle Margin="-2" StrokeThickness="1" Stroke="Red"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Grid>
        <Button Margin="122.275,36.227,139.525,217.173" />
        <Button Margin="122.275,127.2,139.525,126.2" FocusVisualStyle="{DynamicResource newFocusStyle}"/>
        <Button Margin="97.919,209.328,106.481,32.872" FocusVisualStyle="{x:Null}"/>
    </Grid>
</Window>
huangcongde

 

而有些控件在获取焦点后,出现黑色虚线的效果,就是因为该属性的原因,如果想去掉这种效果,只需要将FocusVisualStyle设置为{x:Null}即可

默认的获取键盘焦点样式,会出现黑色虚线边框

        

  自定义样式后的效果

 

将FocusVisualStyle设置为{x:null}的效果

 

以上是关于WPF设置控件获取键盘焦点时的样式FocusVisualStyle的主要内容,如果未能解决你的问题,请参考以下文章

WPF用键盘左右键按下获取按钮焦点,离开执行按钮事件

在 WPF 中加载的控件上显示焦点元素

WPF虚拟键盘如何不获得当前焦点

WPF 选项卡控件样式

WPF 处理textbox的样式问题,点击获得焦点背景颜色变化,当点击窗体其他地方(非控件),textbox自动

wpf datagrid怎么得到焦点?用datagrid.focus()不行