[译]WPF开源控件扩展库ControlzEx

  • 原文链接:https://github.com/ControlzEx/ControlzEx

  • 翻译:沙漠尽头的狼(谷歌及百度提供翻译支持)

Shared Controlz for WPF

支持 .NET Framework(4.5.2、4.6.2 及更高版本)、.NET Core (3.1) 和 .NET 5(在 Windows 上)

Let's get started

  • 版本和版本说明[1]

  • 构建[2]ControlzEx 解决方案

TextBoxInputMaskBehavior

TextBoxInputMaskBehavior可用于显示文本框内的掩码。

注意:它只是一个掩码,不会验证您的文本。

<TextBlock Grid.Row="0"Grid.Column="0"Margin="4"Text="Datetime" />
<TextBox Grid.Row="0"Grid.Column="1"Margin="4"><behaviors:Interaction.Behaviors><controlzEx:TextBoxInputMaskBehavior InputMask="00/00/0000" /></behaviors:Interaction.Behaviors>
</TextBox><TextBlock Grid.Row="1"Grid.Column="0"Margin="4"Text="Phone Number" />
<TextBox Grid.Row="1"Grid.Column="1"Margin="4"><behaviors:Interaction.Behaviors><controlzEx:TextBoxInputMaskBehavior InputMask="( 999 ) 000 000 - 00"PromptChar="_" /></behaviors:Interaction.Behaviors>
</TextBox>

原始 TextBoxInputMaskBehavior 取自 Blindmeis 的博客。

  • https://blindmeis.wordpress.com/2015/01/20/wpf-textbox-input-behavior/

  • https://blindmeis.wordpress.com/2010/06/01/wpf-masked-textbox-behavior/

KeyboardNavigationEx

KeyboardNavigationEx是一个常见聚焦问题的辅助类。UI 元素本身的焦点不是问题。但是如果我们使用常见的对焦方法,控件获得了焦点,但没有获得焦点视觉样式。

仅当控件从键盘设备获得焦点或 SystemParameters.KeyboardCues 为 true 时,原KeyboardNavigation类才处理视觉样式。

使用KeyboardNavigationEx您可以通过两种简单的方式解决此问题。

后台代码:

public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();this.Loaded += (s, e) => { KeyboardNavigationEx.Focus(this.TheElementWhichShouldGetTheFocus); };}
}

或在 XAML 中:

<Button controlzex:KeyboardNavigationEx.AlwaysShowFocusVisual="True">Hey, I get the focus visual style on mouse click!</Button>

自动移动ToolTip

一个自动移动的ToolTip。更多信息[3]

<Button Margin="5"Padding="5"Content="Test Button 2"ToolTipService.ShowDuration="20000"><Button.ToolTip><ToolTip local:ToolTipAssist.AutoMove="True"><ToolTip.Template><ControlTemplate><Grid><Border Background="Gray"BorderBrush="Black"BorderThickness="1"Opacity="0.9"SnapsToDevicePixels="True" /><TextBlock Margin="5"Foreground="WhiteSmoke"FontSize="22"Text="ToolTipHelper AutoMove sample"TextOptions.TextFormattingMode="Display"TextOptions.TextRenderingMode="ClearType" /></Grid></ControlTemplate></ToolTip.Template></ToolTip></Button.ToolTip>
</Button>

GlowWindowBehavior

GlowWindowBehavior在窗口周围添加一个光晕。

WindowChromeBehavior

ControlzEx 为 WPF 窗口提供了自定义镶边,并为其提供了一些其他更深层次的修复。

大多数修复和改进来自MahApps.Metro[4]和Fluent.Ribbon[5]

具体的技术实现描述在这:

http://blogs.msdn.com/b/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx

它是原始 Microsoft WPF Shell 集成库的一个分支。目前的 Microsoft 实现在这里找到:

  • https://github.com/dotnet/wpf

  • http://referencesource.microsoft.com

PopupEx

自定义的Popup窗口,可用于验证错误模板或其他类似MaterialDesignInXamlToolkit[6]或MahApps.Metro[7]中的其他内容。

PopupEx 提供了一些额外的不错的功能:

  • 如果主机窗口大小或位置发生变化,则重新定位

  • 如果主机窗口最大化,则重新定位,反之亦然

  • 如果主机窗口被激活,它只能是最顶层

TabControlEx

自定义TabControl,在取消选择时将TabItem内容保留在VisualTree中,因此在再次选择TabItem后不会重新创建。visibility行为可以通过ChildContentVisibility依赖属性设置。

用法:

<controlz:TabControlEx><TabItem Header="Lorem"><TextBlock Text="Lorem ipsum dolor sit amet, consetetur sadipscing"HorizontalAlignment="Center"FontSize="30" /></TabItem><TabItem Header="ipsum"><TextBox Text="Lorem ipsum dolor sit amet, consetetur sadipscing"HorizontalAlignment="Center"Margin="5" /></TabItem>
</controlz:TabControlEx>

PackIconBase

一个用于在 WPF 中创建图标包的帮助类。

要创建新的图标包,请按照下列步骤操作:

定义一个键(通常是一个枚举):

public enum PackIconKind
{Happy,Sad
}

子类PackIconBase,添加

  • 默认style key

  • 为每个key提供Path数据的工厂

public class PackIcon : PackIconBase<PackIconKind>
{static PackIcon(){DefaultStyleKeyProperty.OverrideMetadata(typeof(PackIcon), new FrameworkPropertyMetadata(typeof(PackIcon)));}public PackIcon() : base(CreateIconData){ }private static IDictionary<PackIconKind, string> CreateIconData(){return new Dictionary<PackIconKind, string>{{PackIconKind.Happy, "M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8C16.3,8 17,8.7 17,9.5M12,17.23C10.25,17.23 8.71,16.5 7.81,15.42L9.23,14C9.68,14.72 10.75,15.23 12,15.23C13.25,15.23 14.32,14.72 14.77,14L16.19,15.42C15.29,16.5 13.75,17.23 12,17.23Z"},{PackIconKind.Sad, "M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M15.5,8C16.3,8 17,8.7 17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M12,14C13.75,14 15.29,14.72 16.19,15.81L14.77,17.23C14.32,16.5 13.25,16 12,16C10.75,16 9.68,16.5 9.23,17.23L7.81,15.81C8.71,14.72 10.25,14 12,14Z"}};}
}

提供默认样式(通常在您的 Generic.xaml 中,例如:

<Style TargetType="{x:Type local:PackIcon}"><Setter Property="Height" Value="16" /><Setter Property="Width" Value="16" /><Setter Property="HorizontalAlignment" Value="Left" /><Setter Property="VerticalAlignment" Value="Top" /><Setter Property="IsTabStop" Value="False" /><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="{x:Type local:PackIcon}"><Viewbox><Canvas Width="24" Height="24"><Path Data="{Binding Data, RelativeSource={RelativeSource TemplatedParent}}"Fill="{TemplateBinding Foreground}" /></Canvas></Viewbox></ControlTemplate></Setter.Value></Setter>
</Style>

您的用户现在应该可以通过一种简单的方式在他们的应用程序中使用您的图标包:

<ns:PackIcon Kind="HappyIcon" />

Theming

ControlzEx 提供ThemeManager帮助您为应用程序提供主题管理支持。有关更多信息,请参阅该节[8]

Licence

MIT

参考资料

[1]

版本和版本说明: https://github.com/ControlzEx/ControlzEx/releases

[2]

构建: https://github.com/ControlzEx/ControlzEx/wiki/Home

[3]

信息: https://jkarger.de/2014/11/02/how-to-make-the-tooltip-follow-the-mouse/

[4]

MahApps.Metro: https://github.com/MahApps/MahApps.Metro

[5]

Fluent.Ribbon: https://github.com/fluentribbon/Fluent.Ribbon

[6]

MaterialDesignInXamlToolkit: https://github.com/ButchersBoy/MaterialDesignInXamlToolkit

[7]

MahApps.Metro: https://github.com/MahApps/MahApps.Metro

[8]

该节: https://github.com/ControlzEx/ControlzEx/blob/develop/Wiki/ThemeManager.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301501.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html图片分开,webpack单独分离打包css,css里引用的图片路径错误,怎么解决?

现在我的这个项目是将css和js单独打包出来&#xff0c;打包后的目录结构和打包前一致。打包前&#xff1a;从这张图可以看到&#xff0c;如果是css文件夹根目录下的css文件引用images文件夹下的图片应该使用../就可以了&#xff0c;如果是css下某一个文件夹下面的css引用图片的…

每日一笑 | 程序员千万不能轻易去网吧!

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

.Net Core with 微服务 - Consul 注册中心

上一次我们介绍了 Ocelot 网关的基本用法。这次我们开始介绍服务注册发现组件 Consul 的简单使用方法。服务注册发现首先先让我们回顾下服务注册发现的概念。在实施微服务之后&#xff0c;我们的调用都变成了服务间的调用。服务间调用需要知道IP、端口等信息。再没有微服务之前…

指定特定的内容为首页

2019独角兽企业重金招聘Python工程师标准>>> 默认的情况下&#xff1a;drupal7是将新发表的文件都显示在首页中。 通过下面的方法&#xff0c;指定特定的内容为首页&#xff1a; 管理--》配置--》系统--》站点信息--》默认首页&#xff0c;将相应的内容地址写入&a…

Python到底是有什么魅力,让程序猿为它折腰?

在大数据时代&#xff0c;信息更新非常快速&#xff0c;计算机语言也犹如雨后春笋般被我们所熟知。C语言、C、Java等可谓是各领风骚、独占鳌头&#xff0c;而Python则是一门近几年崛起很快也很火的编程语言。虽说编程语言难分好坏&#xff0c;各有千秋。但Python到底有什么魔力…

jenkins代理设置

2019独角兽企业重金招聘Python工程师标准>>> 抱怨&#xff1a;对于像我这样苦逼的用户&#xff0c;机器在内网&#xff0c;干啥都要“偷偷”通过代理。 言归正传&#xff0c;jenkins\hudson默认并没有提供proxy设置&#xff0c;nexus仓库倒是提供里proxy设置。jenk…

.NET 6 Preview5+VS2022实战千万并发秒杀项目,帅爆了(附源码)

Microsoft 宣布了Visual Studio 2022 的第一个预览版&#xff0c;并且同时也发布了.NET 6 Preview 5。具有里程碑意义的Visual Studio 2022 Preview 1正式发布&#xff0c;重点是64位&#xff0c;而没有增加新功能&#xff0c;并且同时也发布了.NET 6 Preview 5。下面的内容来自…

你们要的印度布线,这是一种极端的牛X

全世界只有3.14 % 的人关注了数据与算法之美前天&#xff0c;数据汪分享了一篇文章「德国布线牛到不行&#xff1f;今天带你看看中国的&#xff01;」&#xff0c;一个中国的布线&#xff0c;小伙伴们表示非常过瘾&#xff0c;强迫症的最爱。不过数据汪也收到不少粉丝留言说&am…

MIPS衰落 LoongArch崛起

不久前&#xff0c;龙芯发布了自主指令集LoongArch和基于LoongArch设计的3A5000&#xff0c;与MIPS彻底分道扬镳。从龙芯最初基于MIPS添加指令&#xff0c;到发展出基于MIPS的LoongISA&#xff0c;再到最新的LoongArch&#xff0c;龙芯的目的是非常明确的&#xff0c;也是显而易…

html答题赚钱源码,WTS在线答题系统 v1.0.0

WTS在线答题系统为在线答题系统(在线考试)&#xff0c;支持在线考试、在线练习等功能... 支持题型&#xff1a;单选题、多选题、填空题、问答题、判断题、附件题、材料题、视频题、音频题支持答题类型&#xff1a;手工配置 试卷答题、随机抽题练习社交功能&#xff1a;试题收藏…

连锁反应装置积木好玩到尖叫!

▲数据汪特别推荐点击上图进入玩酷屋小木用真金白银来给大家送礼物啦&#xff0c;特别感谢这些年一直以来大家对我们的支持&#xff0c;才让我们越做越好。&#xff08;点我参与送礼活动&#xff09;之前推荐的“小小机械师”成了孩子最受欢迎的玩具&#xff0c;玩了的孩子几乎…

chrome vue.js插件文档_神级宝库!GitHub 标星 1.2w+,Chrome 最天秀的插件都在这里啦!...

文章来源&#xff1a;Python空间作者&#xff1a;Rocky0429作为一个在远古时代用过什么 IE、360、猎豹等浏览器的资深器哥&#xff0c;当我第一次了解 Chrome 的时候&#xff0c;就被它的美貌给吸引住了...就在我用了一段时间之后&#xff0c;我坚决的卸载了电脑上其它碍眼的浏…

Android实现通用的ActivityGroup(效果类似Android微博客户端主界面),...

为什么80%的码农都做不了架构师&#xff1f;>>> 可以说ActivityGroup是Google提供的一个非常优秀的API&#xff0c;但它需要做稍微复杂的重写才能用起来比较方便&#xff0c;本文拟将实现这个稍微复杂的重写。TabActivity作为ActivityGroup唯一的子类却让人大失所望…

类选项html 最后无距离,各种距离 一览无遗

offsetLeft,Left,clientLeft的区别假设 obj 为某个 HTML 控件obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置&#xff0c;整型&#xff0c;单位像素。obj.offsetLeft 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置&a…

华为起诉最新进展,国内航司暂停运行有关客机,收买家庭不得继续抚养被解救儿童,脸书创始人后悔没早学微信,这就是今天的大新闻...

今天是3月11日农历二月初五今天星期一没带耳机线感觉这样用手机是没有灵魂的下面是今天的大新闻华为起诉最新进展&#xff08;环球网&#xff09;多个来自美国的消息证实&#xff0c;美国的联邦法院已经就华为公司起诉美国政府一案给美国政府及其多位部长发去了法院传票。上图&…

前目的地罗伯森是谁_距离目的地只剩10公里,开车师傅却在高速公路上睡着了...

钱江晚报小时新闻记者 吴崇远 通讯员 俞斐“我从杭州过来&#xff0c;刚才开累了&#xff0c;就休息了几分钟……”“杭州到嘉善那么一点路都犯困了&#xff1f;”4月6日凌晨4点30分&#xff0c;高速交警嘉兴支队值班民警在巡逻时发现&#xff0c;一辆厢式小货车开着双跳灯&…

WPF 写一个提醒工具软件(完整项目)

昨天整理硬盘时&#xff0c;偶然发现一个很久之前写的小工具&#xff0c;一个提醒工具。包含定时提醒&#xff0c;间隔提醒功能。看看效果&#xff1a;界面看起来也还凑合&#xff0c;还使用了HandyControl&#xff0c;有桌面托盘功能界面是下面这样的提醒窗口有两种&#xff0…

她只用1个方法,就把英语拿下了!

全世界只有3.14 % 的人关注了数据与算法之美这3招让你未来6个月讲一口流利英语怎么摆脱单词记不住&#xff1f;如何解决听不懂老外讲英语&#xff1f;让老外叹服你口语的唯一方法……请看中国著名口语教学专家写给你的一封信&#xff1a;亲爱的朋友&#xff1a;你好&#xff01…

英语计算机工程师求职信,计算机工程师英文求职信范文

计算机工程师英文求职信范文是由个人简历模板网为你提供的一份个人求职信范文&#xff0c;可直接使用或根据实际情况进行修改。祝您职场顺利&#xff0c;早日找到称心如意的工作&#xff01;Dear Sir or Madam,I am writing to apply for a position as a computer engineer in…

WPF实现环(圆)形菜单

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织“ 前言&#xff0c;接着上一篇圆形菜单。”欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 01—效果预览效果预览&#xff08;更多效果请下载源码体验&#xff09;&#xff1a;02—代码如下一、…