在资源字典中定义样式时,您可以使用
x:Name="xyz"
和
x:Type="xyz".
并且可以在 XAML 中引用此样式,例如 {StaticResource xyz}。
大多数示例使用 'x:Key',而 'name' 和 'key' 之间的区别在于使用 'x:name' 可以让您使用这种样式定义代码隐藏?
修复:
这个问题是完全错误的。想要询问的是 x:Key 和 x:Name 之间的区别。但是我自己并没有去尝试这段代码,而只是依靠内存——我以为我在 ResourceDictionary 中都有,这是错误的。而且我也没有这样的代码
<xxx.Resources >
部分,因为它也不起作用。您不能引用没有 x:Key 的样式(x:Name 在这里不起作用),并且在没有 x:Key 的情况下添加两种样式会引发异常,因为两者都在字典中获得相同的(空?)键。
雷以非常好的方式提出了所有不同之处,谢谢。
我的错
最佳答案
这是一个技巧问题。 其实你不能 使用任一方法在 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
如果需要,但它不会影响 key 。请注意
x:Type
是由 XAML 预定义的标记扩展,而 x:Name
和 x:Key
是实际的 XAML 关键字。所以x:Type
只能在标记扩展语法中用作属性的值:something="{x:Type whatever}"
而
x:Name
和 x:Key
是可用于元素的属性。
关于WPF 样式 : difference between x:Name and x:Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162425/