正文
XAML 很少人知道的科技 - walterlv
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
原文:XAML 很少人知道的科技 - walterlv 发布于 2019-04-30 02:30 更新于 2019-04-30 11:08 本文介绍不那么常见的 XAML 相关的知识。 当你用设计器修改元素的 Margin 时,你会看到用逗号分隔的 不过你有试过,使用空格分隔吗? 有一些枚举标记了 那么在 XAML 里面如何设置多个枚举值呢?使用逗号( 使用逗号( 这里的 WPF/UWP 中原生控件的 XAML 命名空间是 http://schemas.microsoft.com/winfx/2006/xaml/presentation,与 XAML 编译器相关的 XAML 命名空间是 http://schemas.microsoft.com/winfx/2006/xaml,还有其他 Url 形式的 XAML 命名空间。 只需要在库中写如下特性(Attribute)即可将命名空间指定为一个 url: 详情请阅读博客: 此写法要生效,定义的组件与使用的组件不能在同一程序集。 WPF/UWP XAML 编译器的命名空间前缀是 这样,当 XAML 设计器帮助你自动添加命名空间时,将会使用 详情请阅读博客: 此写法要生效,定义的组件与使用的组件不能在同一程序集。 自己写了一个 方法是在库中定义命名空间前缀为 http://schemas.microsoft.com/winfx/2006/xaml/presentation。 此写法要生效,定义的组件与使用的组件不能在同一程序集。 本文会经常更新,请阅读原文: 如果你想持续阅读我的最新博客,请点击 RSS 订阅,或者前往 CSDN 关注我的主页。 Please enable JavaScript to view the comments powered by Disqus.XAML 很少人知道的科技
本文内容
Thickness 可以用空格分隔
Thickness
属性。使用设计器或者属性面板时,使用逗号是默认的行为。<Button Margin="10 12 0 0" />
使用逗号(
,
)设置多值枚举[Flags]
特性,这样的枚举可以通过位运算设置多个值。[Flags]
enum NonClientFrameEdges
{
// 省略枚举内的值。
},
)即可,如下面的例子:<WindowChrome NonClientFrameEdges="Left,Bottom,Right" GlassFrameThickness="0 64 0 0" UseAeroCaptionButtons="False" />
使用加号(
+
)设置多值枚举,
) 设置多值枚举是通用的写法,但是在 WPF/UWP 中设置按键/键盘快捷键的时候又有加号(+
)的写法。如下面的例子:<KeyBinding Command="{x:Static WalterlvCommands.Foo}" Modifiers="Control+Shift" Key="W" />
Modifiers
属性的类型是 ModifierKeys
,实际上是因为这个类型特殊地编写了一个 TypeConverter
来转换字符串,所以键盘快捷键多值枚举使用的位或运算用的是加号(+
)。设置 Url 型的 XAML 命名空间(xmlns)
using System.Windows.Markup;
[assembly: XmlnsDefinition("http://walterlv.github.io/demo", "Walterlv.NewCsprojDemo")]设置默认的 XAML 命名空间前缀
x
。如果你写了自己的控件,希望给控件指定一个默认的命名空间前缀,那么可以通过在库中写如下特性(Attribute)实现:using System.Windows.Markup;
[assembly: XmlnsPrefix("http://walterlv.github.io/demo", "w")]w
前缀。虽然实际上你也能随便改。让你做的控件库不需要 XAML 命名空间前缀
DemoPage
,要在 XAML 中使用,一般需要添加命名空间前缀才可以。但是也可以不写:<UserControl
x:Class="HuyaHearhira.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<DemoPage />
</Grid>
</UserControl>using System.Windows.Markup;
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "Walterlv.NewCsprojDemo")]
https://blog.walterlv.com/post/those-people-dont-know-about-xaml.html
,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
进行许可。欢迎转载、使用、重新发布,但务必保留文章署名
吕毅
(包含链接:
https://blog.walterlv.com
),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请
与我联系 (walter.lv@qq.com)
。