x:Key的行为就像一个附加属性,它在ResourceDictionary的子级中可用。但是,我在ResourceDictionary(repo)中找不到x:Key的实现。
x:Key
ResourceDictionary
问题:x:Key在MAUI中是如何实现的,在哪里实现的?
vi4fp9gy1#
x:Key以及作为xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"命名空间的一部分的其他属性是特殊的**XmlNames**,它们被构建到XAML解析器中;它们不是作为附加属性实现的。2基本上,它们几乎等同于C#中的关键字。您可以在XmlName结构中查看它们的静态变量声明:https://github.com/dotnet/maui/blob/main/src/Controls/src/Xaml/XmlName.cs例如,静态XmlName字段“xKey”(x:Key)在XamlParser类中引用如下:https://github.com/dotnet/maui/blob/main/src/Controls/src/Xaml/XamlParser.cs#L261以相同方式实现的其他特殊XAML属性包括:第一个是第五个是第一个。x:Class和x:FieldModifier也是x:命名空间的一部分,但它们是一种特殊情况。编辑:应该提到,如果你想创建自己的一组行为相似的扩展,你可以创建一个叫做Markup Extension的东西。尽管你不能直接添加到x:命名空间。例如,x:Static是作为一个标记扩展来实现的:https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Xaml/MarkupExtensions/StaticExtension.cs
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
XmlName
x:Class
x:FieldModifier
x:
x:Static
1条答案
按热度按时间vi4fp9gy1#
x:Key
以及作为xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
命名空间的一部分的其他属性是特殊的**XmlNames**,它们被构建到XAML解析器中;它们不是作为附加属性实现的。2基本上,它们几乎等同于C#中的关键字。您可以在
XmlName
结构中查看它们的静态变量声明:https://github.com/dotnet/maui/blob/main/src/Controls/src/Xaml/XmlName.cs例如,静态
XmlName
字段“xKey”(x:Key
)在XamlParser类中引用如下:https://github.com/dotnet/maui/blob/main/src/Controls/src/Xaml/XamlParser.cs#L261以相同方式实现的其他特殊XAML属性包括:
第一个是第五个是第一个。
x:Class
和x:FieldModifier
也是x:
命名空间的一部分,但它们是一种特殊情况。编辑:应该提到,如果你想创建自己的一组行为相似的扩展,你可以创建一个叫做Markup Extension的东西。尽管你不能直接添加到
x:
命名空间。例如,x:Static
是作为一个标记扩展来实现的:https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Xaml/MarkupExtensions/StaticExtension.cs