xaml
文章平均质量分 54
walter lv
这个作者很懒,什么都没留下…
展开
-
如何编写 WPF 的标记扩展 MarkupExtension,即便在 ControlTemplate/DataTemplate 中也能生效
WPF 的标记扩展为 WPF 带来了强大的扩展性。利用自定义的标记扩展,我们能够为 XAML 中的属性提供各种各样种类的值,而不仅限于自带的那一些。不过有小伙伴发现在 ControlTemplate 或 DataTemplate 中编写标记扩展有时并不能正常工作,而本文将提供解决方法。本文并不会详细讲解如何编写 WPF 的标记扩展,如果你想了解相关的知识,建议阅读官网:Markup Exte...原创 2020-01-28 17:25:35 · 663 阅读 · 0 评论 -
让你编写的控件库在 XAML 中有一个统一的漂亮的命名空间(xmlns)和命名空间前缀
在 WPF XAML 中使用自己定义的控件时,想必大家都能在 XAML 中编写出这个控件的命名空间了。然而——我写不出来,除非借助 ReSharper。如果控件能够有一个漂亮的命名空间和命名空间前缀呢?——好吧,还是写不出来,不过,至少漂亮些。本文将指导你自定义在 XAML 中使用的命名空间。本文内容达到什么样的效果?这是怎么做到的呢?还有什么更高级的玩法吗?一些限制参考资料达到什么样的效...原创 2020-01-28 17:19:20 · 649 阅读 · 2 评论 -
流畅设计 Fluent Design System 中的光照效果 RevealBrush,WPF 也能模拟实现啦!
UWP 才能使用的流畅设计效果好惊艳,写新的 UWP 程序可以做出更漂亮的 UI 啦!然而古老的 WPF 项目也想解解馋怎么办?于是我动手实现了一个!迫不及待看效果 ▲ 是不是很像 UWP 中的 RevealBorderBrush?不止是效果像,连 XAML 写法也像:<Border BorderThickness="1" Margin="50,34,526...原创 2018-04-05 17:08:01 · 2823 阅读 · 2 评论 -
WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则
只要你用 XAML 写代码,我敢打赌你一定用各种方式使(nuè)用(dài)过 Grid。不知你有没有在此过程中看到过 Grid 那些匪夷所思的布局结果呢?本文将带你来看看 Grid 布局中的 Bug。无限空间下的比例先上一段代码,直接复制到你的试验项目中运行:<Canvas> <Grid Height="100"> <...原创 2018-05-19 07:50:58 · 1309 阅读 · 3 评论 -
WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)
不知从什么时候开始,头像流行使用圆形了,于是各个平台开始追逐显示圆形裁剪图像的技术。WPF 作为一个优秀的 UI 框架,当然有其内建的机制支持这种圆形裁剪。不过,内建的机制仅支持画刷,而如果被裁剪的元素支持交互,或者拥有普通画刷无法达到的显示效果,那么就需要本文介绍的更加通用的解决方法了。UWP 的圆形裁剪请左转参考:UWP 将图片裁剪成圆形(椭圆)。WPF 的 UIElement...原创 2018-06-26 20:55:40 · 2168 阅读 · 0 评论 -
使用 Xamarin 开发 iOS 键盘扩展(含网络访问)
作为一位 .NET 技术的死忠,开发 iOS 应用当然要使用 Xamarin 啦!本文用我的阅读的文档和实践为素材,介绍如何使用 Xamarin 开发一个 iOS 的键盘扩展。你可以在 Walterlv.CloudKeyboard 仓库中获得本文所述的全部源代码。本文内容搭建环境你需要了解的 iOS 键盘扩展的背景知识创建 iOS 键盘扩展项目第一步:创建 Xamarin.Forms 项目...原创 2019-02-24 15:32:41 · 796 阅读 · 0 评论 -
在 Snoop 中使用 PowerShell 脚本进行更高级的 UI 调试
在 WPF 开发时,有 Snoop 的帮助,UI 的调试将变得非常轻松。使用 Snoop,能轻松地查看 WPF 中控件的可视化树以及每一个 Visual 节点的各种属性,或者查看数据上下文,或者监听查看事件的引发。不过,更强大的是支持使用 PowerShell 脚本。这使得它即便 UI 没有给你提供一些入口,你也能通过各种方式查看或者修改 UI。本文内容Snoop PowerShell 入口...原创 2019-02-24 15:46:50 · 618 阅读 · 0 评论 -
WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了
如果你写了一个 MarkupExtension 在 XAML 当中使用,你会发现你在 MarkupExtension 中定时的属性是无法使用 XAML 绑定的,因为 MarkupExtension 不是一个 DependencyObject。本文将给出解决方案,让你能够在任意的类型中写出支持 XAML 绑定的属性;而不一定要依赖对象(DependencyObject)和依赖属性(Dependen...原创 2019-02-24 15:53:20 · 1168 阅读 · 0 评论 -
C# 跨设备前后端开发探索
每个人都拥有 好奇心,好奇心驱使着我们总是去尝试做一些有趣的事情。带起你的好奇心,本文将使用 C# 开发各种各样好玩的东西。[本文内容已加入 2019 年 4 月 13 日的广州 .NET 俱乐部第 2 届线下沙龙。本文内容0x00 序章好奇心先搞起来0x01 C# 跨设备前后端开发Web 后端Windows 桌面端公共代码控制台iOS 端Web 前端0x02 C# 还能做什么?0x0...原创 2019-05-19 17:09:05 · 1235 阅读 · 0 评论 -
UWP 流畅设计中的光照效果(容易的 RevealBorderBrush 和不那么容易的 RevealBackgroundBrush)
在 Windows 10.0.16299 中,RevealBrush 被引入,可以实现炫酷的鼠标滑过高亮效果和点击光照。本文将告诉大家如何完整地实现这样的效果。Reveal 的效果(自带)在微软官方推荐的 XAML Controls Gallery 应用中,我们可以找到 Reveal 的实现章节。下图是应用中演示的 Reveal 效果:不过在其实现中,全都是使用的系统自带的...原创 2018-04-15 10:42:09 · 667 阅读 · 0 评论 -
WPF 自定义键盘焦点样式(FocusVisualStyle)
WPF 自带的键盘焦点样式是与传统控件样式搭配的,但 WPF 凭着其强大的自定义样式的能力,做出与传统控件样式完全不同风格的 UI 简直易如反掌。这时,其自带的键盘焦点样式(FocusVisualStyle)就非常不搭了,改改会舒服得多。比如,改成 UWP 的样式。本文将展示 WPF 自定义键盘焦点样式自定义的坑!原创 2017-12-30 14:27:53 · 4387 阅读 · 0 评论 -
实现一个 WPF 版本的 ConnectedAnimation
Windows 10 的创造者更新为开发者们带来了 Connected Animation 连接动画,这也是 Fluent Design System 的一部分。它的视觉引导性很强,用户能够在它的帮助下迅速定位操作的对象。不过,这是 UWP,而且还是 Windows 10 Creator’s Update 中才带来的特性,WPF 当然没有。于是,我自己写了一个“简易版本”。原创 2017-12-30 14:17:15 · 799 阅读 · 0 评论 -
WPF 和 UWP 中,不用设置 From 或 To,Storyboard 即拥有更灵活的动画控制
无论是 WPF 还是 UWP 开发,如果用 Storyboard 和 Animation 做动画,我们多数时候都会设置 From 和 To 属性,用于从起始值动画到目标值。然而动画并不总是可以静态地指定这些值,因为更多的时候动画的起始值和目标值取决于当前 UI 的状态。本文中,我将将尽量避免设置 From 和 To 值,让动画可以随时中断并重新开始,而中途不会出现突兀的变化。原创 2017-10-31 16:19:13 · 1601 阅读 · 0 评论 -
当我们使用 MVVM 模式时,我们究竟在每一层里做些什么?
这篇文章不会说 MVVM 是什么,因为讲这个的文章太多了;也不会说 MVVM 的好处,因为这样的文章也是一搜一大把。我只是想说说我们究竟应该如何理解 M-V-VM,当我们真正开始写代码时,应该在里面的每一层里写些什么。原创 2017-11-30 01:32:39 · 3279 阅读 · 0 评论 -
分享一个算法,计算能在任何背景色上清晰显示的前景色
背景色千差万别,如果希望在这样复杂的背景色下显示清晰可辨的前景色(例如显示文字),那如何选择这样的前景色才能确保适用于所有的背景呢?原创 2017-11-30 01:43:21 · 2763 阅读 · 0 评论 -
WPF 跨应用程序域的 UI(Cross AppDomain UI)
为自己写的程序添加插件真的是一个相当常见的功能,然而如果只是简单加载程序集然后去执行程序集中的代码,会让宿主应用程序暴露在非常危险的境地!因为只要插件能够运行任何一行代码,就能将宿主应用程序修改得天翻地覆哭爹喊娘;而根本原因,就在于暴露了整个托管堆和整个 UI 树。如果将宿主和插件放到不同的应用程序域中,则可以解决此问题。原创 2017-11-23 22:18:20 · 1468 阅读 · 0 评论 -
Visual->UIElement->FrameworkElement,带来更多功能的同时也带来了更多的限制
我们总会自然而然地认为这些控件都是有大小的,它们会在合适的位置显示自己,通常不会超出去。但是,`FrameworkElement` 甚至是 `Control` 用得久了,都开始忘记 `Visual`、`UIElement` 带给我们的那些自由。原创 2017-11-23 22:16:21 · 2227 阅读 · 0 评论 -
用动画的方式画出任意的路径(直线、曲线、折现)
WPF/UWP 中提供的 Path 类可以为我们绘制几乎所有可能的矢量图形。但是,如果这些矢量图形可以以动画的形式播放出来,那将可以得到非常炫酷的演示效果。原创 2017-11-23 22:37:19 · 1508 阅读 · 2 评论 -
WPF 绘制对齐像素的清晰显示的线条
此前有小伙伴询问我为何他 1 像素的线条显示发虚,然后我告诉他是“像素对齐”的问题,然而他设置了各种对齐像素的属性依旧没有作用。于是我对此进行了一系列试验,对 WPF 像素对齐的各种方法进行了一次总结。原创 2017-12-20 23:22:15 · 3897 阅读 · 0 评论 -
让 ScrollViewer 的滚动带上动画
WPF 的 ScrollViewer 没有水平滚动和垂直滚动的属性 HorizontalScrollOffset VerticalScrollOffset,只有水平滚动和垂直滚动的方法 ScrollToHorizontalOffset ScrollToVerticalOffset,那么怎么给滚动过程加上动画呢?既然没有属性,那我们加个属性好了,反正附加属性就是用来干这个事儿的。原创 2017-12-20 23:24:14 · 2342 阅读 · 0 评论 -
DependencyProperty.UnsetValue 的正确打开方式
无论是 WPF,还是 UWP,只要你用了绑定或者标记扩展,一定会碰到一个神奇的值——DependencyProperty.UnsetValue。UnsetValue 是什么意思?为什么会出现这个值呢?如果要让 UnsetValue 为我们所用,正确的用法又是什么呢?DependencyProperty.UnsetValue 是什么?要知道这是什么,一定要看源码:/// <summary> Stand原创 2017-10-11 00:05:34 · 3638 阅读 · 0 评论