前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WPF 自定义键盘焦点样式(FocusVisualStyle)

WPF 自定义键盘焦点样式(FocusVisualStyle)

作者头像
walterlv
发布于 2020-02-10 05:58:27
发布于 2020-02-10 05:58:27
87700
代码可运行
举报
运行总次数:0
代码可运行

WPF 自定义键盘焦点样式(FocusVisualStyle)

发布于 2017-12-17 15:34 更新于 2018-12-14 01:54

WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌。这时,其自带的键盘焦点样式(FocusVisualStyle)就非常不搭了,改改会舒服得多。比如,改成 UWP 的样式。

本文将展示 WPF 自定义键盘焦点样式自定义的


▲ WPF 自带的键盘焦点样式

▲ UWP 暗主题键盘焦点样式

其实微软官方文档 Styling for Focus in Controls, and FocusVisualStyle - Microsoft Docs 有说明 FocusVisualStyle,但是——完全没有讲自定义好吗!

所以,我试着写一个样式以覆盖默认的样式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <Rectangle Margin="-3" StrokeThickness="3" Stroke="Gray" SnapsToDevicePixels="true"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

运行一看,结果完全没有效果……

StackOverflow 上也有人说了这件事:xaml - How to redefine FocusVisualStyle for a WPF user control - Stack OverflowRohit Vats 说需要通过单独为 Button 设置才能生效并在回答中贴出了代码。

然而同样的代码应用到项目中,我们会发现,我们此前定义的无 Key 样式也失效了:

我的代码是这样的,试图用上此前定义的无 Key 样式,只是无效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <Rectangle Margin="-3" StrokeThickness="3" Stroke="Gray" SnapsToDevicePixels="true"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}">
    <Setter Property="FocusVisualStyle" Value="{StaticResource {x:Static SystemParameters.FocusVisualStyleKey}}"/>
</Style>

那么,有没有办法能够一次定义整个应用程序生效呢?

答案是——

wpf - Change the FocusVisualStyle in the entire application - Stack Overflow 也承认了这一点。

所以,当希望为 WPF 程序自定义 FocusVisualStyle 样式的话,建议从零开始,定义每一个最底层样式的时候设置好 FocusVisualStyle,其他样式定义的时候继承自最底层样式。
参考资料
本文会经常更新,请阅读原文: https://blog.walterlv.com/post/customize

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WPF 自定义键盘焦点样式(FocusVisualStyle)
2017-12-17 07:34
walterlv
2018/09/18
1.5K0
WPF 自定义键盘焦点样式(FocusVisualStyle)
[WPF自定义控件库]以Button为例谈谈如何模仿Aero2主题
除了以外观为卖点的控件库,WPF的控件库都默认使用“素颜”的外观,然后再提供一些主题包。这样做的最大好处是可以和原生控件或其它控件库兼容,而且对于大部分人来说模仿原生的主题也比自己设计一套好看的UI容易得多。
dino.c
2019/05/29
1.2K0
[WPF自定义控件库]为Form和自定义Window添加FunctionBar
我常常看到同一个应用程序中的表单的按钮————也就是“确定”、“取消”那两个按钮————实现得千奇百怪,其实只要使用统一的Style起码就可以统一按钮的大小,而我喜欢更进一步将”确定“、”取消“或其它按钮封装进一个自定义控件里。
dino.c
2019/06/11
7950
[WPF自定义控件库]为Form和自定义Window添加FunctionBar
WPF --- 重写圆角DataGrid样式
因要符合UI设计, 需要一个圆角的 DataGrid 样式,且需要一个更美观的滚动条,所以重写了一下微软 「WPF」 原生的 DataGrid 的样式,包含如下内容:
Niuery Diary
2023/10/22
7360
WPF --- 重写圆角DataGrid样式
[WPF]使用WindowChrome自定义Window Style
做了WPF开发多年,一直未曾自己实现一个自定义Window Style,无论是《WPF编程宝典》或是各种博客都建议使用WindowStyle="None" 和 AllowsTransparency="True",于是想当然以为这样就可以了。最近来了兴致想自己实现一个,才知道WindowStyle="None" 的方式根本不好用,原因有几点:
dino.c
2019/01/18
2.3K0
[WPF]使用WindowChrome自定义Window Style
UWP 轻量级样式定义(Lightweight Styling)
发布于 2018-09-26 09:17 更新于 2018-12-14 01:54
walterlv
2020/02/10
7100
WPF滑块控件(Slider)的自定义样式
点击确定后,我们的页面的Resources中,增加了一系列样式代码,而滑块代码会被修改为如下样子:
Kiba518
2019/08/02
3.9K0
[WPF自定义控件]从ContentControl开始入门自定义控件
我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别)。这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深入的概念在以后介绍各控件的文章中实际运用到才介绍。
dino.c
2019/05/17
4.1K0
WPF 应用完全模拟 UWP 的标题栏按钮
发布于 2018-08-04 09:35 更新于 2018-08-05 02:21
walterlv
2018/09/18
2.3K0
WPF 应用完全模拟 UWP 的标题栏按钮
WPF TreeGrid MVVM 模式下自定义表格带展开缩放效果,并且可以获取点击行的数据
MVVM其实就是:Model 、View、ViewModel三个的简称,就像MVC一样。 Model就是模型。View就是视图。ViewModel就是和view进行绑定的。
Shunnet
2022/05/31
6.1K0
WPF TreeGrid MVVM 模式下自定义表格带展开缩放效果,并且可以获取点击行的数据
WPF全局样式设置
/Resources/OverwrideDefaultControlStyles.xaml
码客说
2021/07/30
1.6K0
wpf listBox 多列大图片效果
修改ListBox的模版 多列大图片效果,加上删除button 看图 上代码! <Window x:Class="Thunder.SetCenter.RoomSetting.ActivityPhoto
lpxxn
2018/01/31
2.5K0
wpf  listBox  多列大图片效果
WPF TextBox搜索框&自定义TextBox样式
首先要做搜索框当然要有一个搜索的图标啦,幸运的是,fontawesome里面有的~
zls365
2021/04/02
4.8K0
[译]WPF开源控件扩展库ControlzEx
支持 .NET Framework(4.5.2、4.6.2 及更高版本)、.NET Core (3.1) 和 .NET 5(在 Windows 上)
沙漠尽头的狼
2021/12/01
1.3K0
[译]WPF开源控件扩展库ControlzEx
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
不过它用起来不怎么样,与其这样还不如参考UWP的ListView实现,而且动画效果也很好看:
dino.c
2020/02/21
3K0
[WPF 自定义控件]创建包含CheckBox的ListBoxItem
[WPF自定义控件库]使用WindowChrome自定义RibbonWindow
自定义Window有可能是设计或功能上的要求,可以是非必要的,而自定义RibbonWindow则不一样:
dino.c
2019/06/16
1.2K0
[WPF 自定义控件]自定义一个“传统”的 Validation.ErrorTemplate
数据绑定模型允许您将与您Binding的对象相关联ValidationRules。 如果用户输入的值无效,你可能希望在应用程序 用户界面 (UI) 上提供一些有关错误的反馈。 提供此类反馈的一种方法是设置Validation.ErrorTemplate附加到自定义ControlTemplate的属性。
dino.c
2020/03/02
1.5K0
[WPF自定义控件库] 给WPF一个HyperlinkButton
这篇文章的目的是介绍怎么在WPF里创建自定义的HyperlinkButton控件。很神奇的,WPF居然连HyperlinkButton都没有,不过它提供了另一种方式用于在UI上添加超级链接:
dino.c
2019/08/23
1.2K0
[WPF自定义控件库] 给WPF一个HyperlinkButton
[WPF自定义控件库]好用的VisualTreeExtensions
A long time ago in a galaxy far, far away....微软在Silverlight Toolkit里提供了一个好用的VisualTreeExtensions,里面提供了一些查找VisualTree的扩展方法。在那个时候(2009年),VisualTreeExtensions对我来说正好是个很棒的Linq和扩展方法的示例代码,比那时候我自己写的FindChildByName之类的方法好用一万倍,所以我印象深刻。而且因为很实用,所以我一直在用这个类(即使是在WPF中),而这次我也把它添加到Kino.Wpf.Toolkit中,可以在 这里 查看源码。
dino.c
2019/07/12
1.2K0
[WPF自定义控件库]好用的VisualTreeExtensions
WPF --- 非Button自定义控件实现点击功能
今天在做一个设置文件夹路径的功能,就是一个文本框,加个按钮,点击按钮,弹出 FolderBrowserDialog 再选择文件夹路径,简单做法,可以直接 StackPanel 横向放置一个 TextBox 和一个 Image Button,然后点击按钮在 后台代码中给 ViewModel 的 FilePath赋值。但是这样属实不够优雅,UI 不够优雅,代码实现也可谓是强耦合,那接下来我分享一下我的实现方案。
Niuery Diary
2023/10/22
4010
WPF --- 非Button自定义控件实现点击功能
相关推荐
WPF 自定义键盘焦点样式(FocusVisualStyle)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验