WPF 样式 : difference between x:Name and x:Type

标签 wpf styles

在资源字典中定义样式时,您可以使用

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:Namex:Key是实际的 XAML 关键字。所以x:Type只能在标记扩展语法中用作属性的值:
    something="{x:Type whatever}"
    

    x:Namex:Key是可用于元素的属性。

    关于WPF 样式 : difference between x:Name and x:Type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162425/

    相关文章:

    wpf - DynamicResource 绑定(bind)到 Color 不起作用

    c# - 如何将数据绑定(bind)到运行的内容?

    c# - 这个错误 : System. Runtime.InteropServices.COMException 是什么?

    javascript - 输入字段内的标签在聚焦时消失

    css - 在 Google Maps API 中更改链接颜色或链接 CSS

    android - 具有多行项目的微调器与 Froyo 上的选定项目显示重叠

    wpf - 解决方法在WPF中震荡工具栏中的菜单样式

    c# - TextBlock 中接受转义字符的等效 HTML 代码

    c# - 无法让 ItemsSource 为 DataGridComboBoxColumn 动态工作

    c# - 如何挂接到 WPF 窗口句柄以监听 USB 事件