XAML 很少人知道的科技 - walterlv
本文介紹不那麽常見的 XAML 相關的知識。 當你用設計器修改元素的 Margin 時,你會看到用逗號分隔的 不過你有試過,使用空格分隔嗎? 有一些枚舉標記了 XAML 很少人知道的科技
本文內容
Thickness 可以用空格分隔
Thickness
屬性。使用設計器或者屬性面板時,使用逗號是默認的行為。<Button Margin="10 12 0 0" />
使用逗號(
,
)設置多值枚舉[Flags]
[Flags]
enum NonClientFrameEdges
{
// 省略枚舉內的值。
}
那麽在 XAML 裏面如何設置多個枚舉值呢?使用逗號(,
)即可,如下面的例子:
<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)
WPF/UWP 中原生控件的 XAML 命名空間是 http://schemas.microsoft.com/winfx/2006/xaml/presentation,與 XAML 編譯器相關的 XAML 命名空間是 http://schemas.microsoft.com/winfx/2006/xaml,還有其他 Url 形式的 XAML 命名空間。
只需要在庫中寫如下特性(Attribute)即可將命名空間指定為一個 url:
using System.Windows.Markup;
[assembly: XmlnsDefinition("http://walterlv.github.io/demo", "Walterlv.NewCsprojDemo")]
詳情請閱讀博客:
- 讓你編寫的控件庫在 XAML 中有一個統一的漂亮的命名空間(xmlns)和命名空間前綴
此寫法要生效,定義的組件與使用的組件不能在同一程序集。
設置默認的 XAML 命名空間前綴
WPF/UWP XAML 編譯器的命名空間前綴是 x
。如果你寫了自己的控件,希望給控件指定一個默認的命名空間前綴,那麽可以通過在庫中寫如下特性(Attribute)實現:
using System.Windows.Markup;
[assembly: XmlnsPrefix("http://walterlv.github.io/demo", "w")]
這樣,當 XAML 設計器幫助你自動添加命名空間時,將會使用 w
前綴。雖然實際上你也能隨便改。
詳情請閱讀博客:
- 讓你編寫的控件庫在 XAML 中有一個統一的漂亮的命名空間(xmlns)和命名空間前綴
此寫法要生效,定義的組件與使用的組件不能在同一程序集。
讓你做的控件庫不需要 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>
方法是在庫中定義命名空間前綴為 http://schemas.microsoft.com/winfx/2006/xaml/presentation。
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 ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。
如果你想持續閱讀我的最新博客,請點擊 RSS 訂閱,或者前往 CSDN 關註我的主頁。
本作品采用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名 呂毅 (包含鏈接: https://blog.walterlv.com ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發布。如有任何疑問,請 與我聯系 ([email protected]) 。
XAML 很少人知道的科技 - walterlv