在资源字典中定义样式时,您可以使用
x:Name="xyz"
和
x:Type="xyz".
并且可以在XAML中引用此样式,如{StaticResource xyz}。
大多数示例使用'x:Key','name'和'key'之间的区别在于使用'x:name'可以让您使用此样式定义代码隐藏?
FIXES: 这个问题完全错了。打算要问的是x:Key和x:Name之间的区别。但是我自己并没有尝试这个代码,而只是依赖于记忆 - 我认为我在ResourceDictionary中都有这个,这是错误的。
我也没有这样的代码 <xxx.Resources >
部分,因为它也不起作用。你不能引用没有x:Key的样式(x:Name在这里不起作用),并且添加两个不带x的样式:Key抛出异常,因为它们在字典中都得到相同的(空?)键。 p>
Ray非常好地表达了所有的不同,谢谢 我的错?
答案 0 :(得分:9)
这是一个技巧问题。事实上,你无法使用
在ResourceDictionary中定义样式x:Type="xyz"
或
x:Name="xyz"
区别在于:
x:Type="xyz"
无效XAML语法。x:Name="xyz"
实际上是有效的XAML语法,用于命名对象(这会影响代码隐藏的生成)但不提供字典键。x:Key="xyz"
也是有效的XAML语法,它提供字典键但不命名对象。在字典中需要一个密钥,因此您必须指定x:Key
(除了对于FrameworkTemplate及其子类,可以从TargetType或DataType推断出密钥)。在字典中,如果需要,您还可以指定x:Name
,但不会影响密钥。
请注意,x:Type
是由XAML预定义的标记扩展,而x:Name
和x:Key
是实际的XAML关键字。因此x:Type
只能在标记扩展语法中用作属性的值:
something="{x:Type whatever}"
而x:Name
和x:Key
是可以在元素上使用的属性。
答案 1 :(得分:2)
x:Name允许您创建可以按名称使用的引用。
x:type允许您创建该类型使用的引用
例如
<Style TargetType="{x:Type Button}">
...
</Style>
创建一个会自动影响按钮的样式