使用TemplateSettings统一外观 TemplateSettings提供一组只读属性,用于在新建ControlTemplate时使用这些约定的属性。...IsTabStop 要在UI上使用“Tab”键导航到某个控件,需要将这个控件的IsTabStop设置为True(默认值就是True)。如果设置成False,不止不能导航到,而且还不能获得焦点。...才能获得焦点,但用户通常期望的是按一次Tab就能导航到CalendarDatePicker。...处理焦点外观 5.1 FocusVisual FocusVisual指控件获得焦点时的视觉指示器,默认是一个围绕控件边界的矩形边框。通常只用Tab键导航并获得焦点FocusVisual才会显示。...UWP提供了一组FucosVisual属性用于控制这个矩形边框的外观。
前言 我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别)。...除了可继承值的属性,需要适当地将ControlTemplate中的元素属性绑定到所属控件的属性,例如Margin="{TemplateBinding Padding}",这样可以方便控件的使用者通过属性调整... /// Header 属性的新值。...依赖属性的默认值可以在注册依赖属性时在PropertyMetadata中设置,通常为属性类型的默认值,也可以在DefaultStyle的Setter中设置,不推荐在构造函数中设置。...依赖属性的定义代码比较复杂,我一直都是用代码段生成,可以参考我另一篇博客为附加属性和依赖属性自定义代码段(兼容UWP和WPF)。 添加依赖属性后再更新控件模板,这个控件就基本完成了。
在 UWP 写一个界面需要将元素排列,在排列元素的时候有特殊的元素叫容器。容器的意思是元素里面包含元素,在 UWP 用到的容器有很多,也可以自己写一个。...Border 有两个设置的属性 HorizontalAlignment 和 VerticalAlignment 属性,这两个属性是通用的 UIElement 的属性,也就是界面元素定义的属性 定义 HorizontalAlignment...在 VisualStudio 2017 可以在 UWP 运行修改 xaml 代码修改界面,在 Border 控件定义边框 边框包括两个需要定义的属性,一个是边框的线条宽度,另一个是边框的颜色。...和 BorderThickness 一样,可以修改 CornerRadius 的上下左右的值,顺序是左上角 右上角 右下角 左下角 <Border HorizontalAlignment...在写到了背景会看到还有属性是 BackgroundSizing 这个表示背景是否包含边框,默认的值是 InnerBorderEdge 也就是背景大小是不包括边框,可以修改为 OuterBorderEdge
前言 WPF有一个灵活的UI框架,用户可以轻松地使用代码控制控件的外观。...使用RelativeSource 之前已经介绍过TemplateBinding,通常ControlTemplate中元素都通过TemplateBinding获取控件的属性值。...Self,引用正在其上设置绑定的元素,并允许你将该元素的一个属性绑定到同一元素的其他属性上。 TemplatedParent,引用应用了模板的元素,其中此模板中存在数据绑定元素。。...,Triggers通过响应属性值变更或事件更改控件的外观。...当属性值改变或其它有可能影响VisualState的事件发生都可以调用这个方法,由它统一管理控件的VisualState。
概述 UWP Community Toolkit 中有一个图片的扩展控件 - ImageEx,本篇我们结合代码详细讲解 ImageEx 的实现。...Stretch - 获取或设置控件的拉伸属性 CornerRadius - 获取或设置控件的圆角半径,用于 Rounded 或 Circle 图片控件 DecodePixelHeight - 获取或设置控件的解码像素高度...,RemoveImageOpened 时设置附加对应的 handler;在 AttachImageFailed,RemoveImageFailed 时设置解除对应的 handler;分别触发对应的事件,...;实现圆角或圆形的图片控件; 另外需要注意的是,从 16299 开始,CornerRadius 属性也能适用于 ImageEx 控件,实现圆角矩形图片;如果系统低于 16299,不会引发异常,但是设置会不生效...总结 到这里我们就把 UWP Community Toolkit 中的 ImageEx 控件的源代码实现过程和简单的调用示例讲解完成了,希望能对大家更好的理解和使用这个控件有所帮助。
下面开始写一个新的游戏,叫修炼,这个游戏很简单,就是点击添加修为,暂时就这个。因为今天的 VS 炸了,所以暂时没有使用 UWP 也打不开之前的游戏,所以就重新写一个。...定义属性 暂时人物的属性就设置为力量、防御、精神力、魔力…… 好像很多的值 在网上找到的推荐是 STR力量(攻击力) AGI敏捷 VIT耐力(防御力) INT智力(魔法攻击力防御力) DEX命中...LUK幸运 悟性 在国产游戏找到的属性 气血——角色当前生命值/角色当前生命值上限/角色总生命值上限,气血值为0时角色死亡 法力——角色当前法力值/角色当前法力值上限/角色总法力值上限,施放技能需要消耗法力...,数值越大施放技能时打出致命一击的概率越大 物理命中、法术命中——玩家的两项命中值,数值越大杀人或怪时失手的概率越低 现在就不写这么多,先写力量、防御、精神力、魔力的值 interface IDfeppzyTmofs...大家也看到这个代码使用的 WPF 写的,因为现在VS无法编译UWP,所以我就先使用 WPF 来做游戏 需要在主页面添加下面的代码让游戏可以到这里 var hnlcDbtdhsdjPage
1.概述 UWP允许开发者通过两种方式创建自定义的控件:UserControl和TemplatedControl(模板化控件)。...1.1 ControlTemplate UWP的控件有很多属性,使用这些属性可以为控件定制不同的外观,例如将Button的Border变粗,Background改为红色等,但通过这种改造控件,能做到的仍十分有限...通过为控件赋予新的ControlTemplate,可以为控件创建全新的外观。在下面的例子中,通过ControlTemplate将Button改成一个圆形按钮。...将ControlTemplate赋值到Control.Template即可改变控件的外观。ControlTemplate的TargetType需要和使用它的控件匹配。...模板化控件包含以下两个部分: 代码: 定义控件属性及行为。 DefaultStyle: 定义控件属性默认样式,包括属性值及ControlTemplate。
我们需要修改属性名称,属性类型,默认值。 我这里的Text ,需要他修改时使用函数,这个叫CallBack。...依赖函数使用DependencyProperty.Register 他参数: name 是 属性名, propertyType 是属性类型, ownerType 是属于的类的类型, typeMetadata...是默认值和修改时使用函数 我们来说下 typeMetadata typeMetadata 可以传入一个默认值,这个值就是我们不在依赖属性赋值,就给他一个默认的值。...然后我们还可以给他一个在属性修改时使用的函数。 注意我们给他的函数不是必需,一般都不需要。...才有用,我们可以使用sender获得类的属性 e 是有 NewValue 和 OldValue , NewValue 是我们要修改的值, OldValue 是原来的值。
从这个类中可以看到,自定义Shape只需要简单地在每个自定义属性的属性值改变时或SizeChanged时调用private void UpdatePath()为Path.Data赋值就完成了,很简单吧。...BeginUpdate、EndUpdate与DeferRefresh 这段代码会产生一个问题:每更改一个属性的值后都会调用UpdatePath(),那不就会重复调用四次?...InvalidateArrange就是利用这种机制的典型例子。MSDN上对InvalidateArrange的解释是: 使 UIElement 的排列状态(布局)无效。...利用InvalidateArrange,我们可以在RingSegment的自定义属性值改变事件中调用InvalidateArrange,异步地触发LayoutUpdated并在其中改变Path.Data...这种方式的好处是容易实现,而且兼容WPF和UWP。
现在的问题 由于UWP中有Flyout,-Picker控件的实现其实算是相当轻松的。如ColorPicker的官方文档就介绍了使用Flyout承载ColorPicker的实现代码。...但是做起来还是有一些问题: 在有“确定/取消”按钮的Flyout中,即使选择了值,如果没有点击“确定”按钮也不更新结果值。...我的解决方案 于是我决定实现一个UWP的Picker类。...此为下文中MyDatePicker的运行效果。 3.2 IsOpen属性 Picker中提供一个bool IsDropDownOpen属性,用于控制下拉框是否打开。...使用TwoWay Binding将IsChecked绑定到Picker的IsDropDownOpen属性,通过IsChecked属性与Flyout的Show/Hide关联起来。
Compositor.CreateDropShadow()可以创建一个DropShadow,将这个DropShadowDropShadow赋值到SpriteVisual的Shadow属性,然后使用ElementCompositionPreview.SetElementChildVisual...将这个SpriteVisual设置到某个UIElement的可视化层里,再将这个UIElement放到需要阴影的元素后面,这样基本的合成阴影就完成了。...官当文档 中是这样描述GetAlphaMask函数的,简单来说就是拿到一个Image、TextBlock或Shape的轮廓,这个轮廓可以作为DropShadow.Mask的值,这样DropShadow的形状就可调用...DropShadowPanel继承自ContentControl,当它的Cotnent为Shape、TextBlock、Image之一(或Toolkit中实现了GetAlphaMask的其它控件)时,它就调用...,把这个阴影设置到一个元素放在ContentPresenter后面,看起来就实现了Content的阴影: _border = GetTemplateChild(PartShadow) as Border
(自己实现) 采用自带效果的控件看起来实现很容易,不过 UWP 控件的自带样式略坑,自己实现控件样式和模板是不可避免的事儿。...注意到 RevealBackgroundBrush 有一个附加属性 RevealBrush.State,设置到控件上用于指定采用哪一种光照效果:RevealBrush.State="Pressed"。...直接将其设置到控件上,发现依然是没有效果的: image.png 看来需要动态地改变,于是必须加上 VisualStateManager。... 在以上这段新的代码中...,我们适时在指针设备滑过的时候切换 RevealBrush.State 为 PointerOver,在按下时切换 RevealBrush.State 为 Pressed。
- DropShadowPanel 控件部分类的依赖属性类 DropShadowPanel.cs - DropShadowPanel 控件部分类的定义和处理方法 DropShadowPanel.xaml...DropShadowPanel.Properties.cs DropShadowPanel 控件部分类的依赖属性类,定义了以下依赖属性: Color - drop shadow 的颜色,变化时会触发 OnColorChanged...,实际的处理方法都在 DropShadowPanel.cs 类中,处理过程就是把 newValue 赋值给 dropShadow; 而在 OnSizeChanged(s, e) 事件触发时,以及初始化时...() 来得到 alphaMask,赋值给 dropShadow 的 mask 属性,作为投影效果的显示效果;配合上面的 UpdateShadowSize() 方法,以及 Opacity,Offset 等属性...总结 到这里我们就把 UWP Community Toolkit 中的 DropShadowPanel 控件的源代码实现过程和简单的调用示例讲解完成了,希望能对大家更好的理解和使用这个控件有所帮助。
(自己实现) 采用自带效果的控件看起来实现很容易,不过 UWP 控件的自带样式略坑,自己实现控件样式和模板是不可避免的事儿。...注意到 RevealBackgroundBrush 有一个附加属性 RevealBrush.State,设置到控件上用于指定采用哪一种光照效果:RevealBrush.State="Pressed"。...直接将其设置到控件上,发现依然是没有效果的: ? 看来需要动态地改变,于是必须加上 VisualStateManager。... 在以上这段新的代码中...,我们适时在指针设备滑过的时候切换 RevealBrush.State 为 PointerOver,在按下时切换 RevealBrush.State 为 Pressed。
概述 UWP Community Toolkit 中有一个为图片或磁贴提供轮播效果的控件 - RotatorTile,本篇我们结合代码详细讲解 RotatorTile 的实现。...继承自 Control 类,先看一下它定义了哪些依赖属性: ExtraRandomDuration - 一个随机时间区间的上限,轮播时一个 0~ExtraRandomDuration 的随机值会被作为轮播间隔使用...0 的关系,去开始轮播,或设置当前索引,或更新上下文; 对 Replace action,如果当前索引介于新的开始索引和结束索引之间,则更新下一个元素; 对 Move action,如果当前索引介于新的开始索引和结束索引之间...,如果没有则退出处理; 定义 Storyboard,动画时间是 500ms,方向和轮播的目标属性根据当前轮播的方向去计算; 在动画结束时,开始准备下一个显示的元素; private void RotateToNextItem...总结 到这里我们就把 UWP Community Toolkit 中的 RotatorTile 控件的源代码实现过程和简单的调用示例讲解完成了,希望能对大家更好的理解和使用这个控件有所帮助。
更新于 2018-12-14 01:54 在 UWP 中,可以通过给控件直接设置属性或在 Style 中设置属性来定制控件的样式;不过这样的样式定义十分有限,比如按钮按下时的样式就没法儿设置...当然可以通过修改 Template 来设置控件的样式,然而 UWP 中控件的样式代码实在是太多太复杂了,还不容易从 Blend 中复制了大量代码出来改,下个版本样式又不一样,于是我们就丢了不少功能。...本文将介绍 UWP 轻量级样式定义(Lightweight styling),你既不用写太多代码,又能获得更多的样式控制。...而且在按下的过程中,还保留了按钮按下时的倾斜效果。...如何找到控件支持的主题资源 前面我们知道了如何定制轻量级样式,但实际做 UI 的时候,我怎么知道有哪些样式主题资源的值可以使用呢?
定制ColorPicker ColorPicker提供了很多属性以设置它的外观,下面介绍一些常用的属性。...当设置为ColorSpectrumShape.Box时显示正方形的光谱,设置为ColorSpectrumShape.Ring时显示为圆型的HSV色轮。...由于Picker控件通常都是指点击按钮弹出一个Popup或Flyout通过鼠标点击选择值的控件,例如DatePicker、TimePicker或者Extended WPF Toolkit 中的ColorPicker...,UWP中的ColorPicker这个名称让我很为难,只好把自己封装的控件命名为ColorSelector。...WPF有Extended WPF Toolkit 中的ColorPicker: ? 而UWP拖到现在才终于肯提供一个ColorPicker。
我还自己的控件,一个值从0到100的圆形的,可以看下面 圆形进度条 参见:http://www.cnblogs.com/ms-uap/p/4641419.html 先说怎么用我的,首先去我源代码https...那么我的控件只需要指定Value就好啦,Value其实是从0到100,如果叫别的应该好,但是我不改,如果你觉得不想要,自己改 xmlns:view="using:lindexi.uwp.control.RountProgress.View...0:n+1,n就是第n个元素 一个显示一个不显示,循环 记得长度乘以是值*宽度 那么我们如果有一个值*宽度的到大小比我们的宽度还大,那么就会截断。...我们可以用第一个为一个值,然后第二个为一个比总长度还大的值,这样会让宽度显示为我们第一个的值,而其他为空,因为第二个比最大还大 我们要做一个30%,我们需要算 长=圆*30%/宽度 圆=PI*(总长度...,然后在界面把我们的宽度给属性,然后换为我们的宽度算,这个简单 代码在https://github.com/lindexi/UWP/tree/master/uwp/control/Progress/Progress
概述 New UWP Community Toolkit V2.2.0 的版本发布日志中提到了 Carousel 的调整,本篇我们结合代码详细讲解 Carousel 的实现。...而部分依赖属性的 PropertyChanged 事件由 OnCarouselPropertyChanged(d, e) 来实现; 下面来看一下 Carousel 类的构造方法: 构造方法中,首先设置了样式...,Tab 导航模式;定义了鼠标滚轮,鼠标点击和键盘事件,并注册了数据源变化事件来得到正确的 SelectedItem 和 SelectedIndex。 ...,因为 Carousel 控件有动画处理,所以在排列时需要考虑到元素排列的动画,以及 Zindex; protected override Size ArrangeOverride(Size finalSize...总结 到这里我们就把 UWP Community Toolkit 中的 Carousel 控件的源代码实现过程和简单的调用示例讲解完成了,希望能对大家更好的理解和使用这个控件有所帮助,让你的图片列表控件更加炫酷灵动
领取专属 10元无门槛券
手把手带您无忧上云