WPF样式:x:Name和x:Type之间的区别

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

x:Name="xyz"

x:Type="xyz". 

并且可以像{StaticResource xyz}一样在XAML中引用此样式。

大多数示例使用'x:Key','name'和'key'之间的区别在于使用'x:name'可以让你使用这个样式定义代码隐藏?

修正:这个问题是完全错误的。 打算要问的是x:Key和x:Name之间的区别。 但是我自己并没有去尝试这个代码,而只是依赖于回忆 - 我以为我在ResourceDictionary中都有这两个错误。 而且我也没有这样的代码

 <xxx.Resources > 

部分,因为它也不起作用。 您不能引用没有x:Key(x:Name在此不起作用)的Style,并且添加两个不带x:Key的样式,因为它们在字典中都获得相同(空?)键,所以会引发异常。

Ray以非常好的方式提供了所有的差异,谢谢。
我的错


这是一个诡计的问题。 实际上,您无法使用任何一种方式在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:Namex:Key是实际的XAML关键字。 所以x:Type只能在标记扩展语法中用作属性的值:

    something="{x:Type whatever}"
    

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


    x:名称允许您创建可以按名称使用的引用。

    x:type允许您创建该类型使用的引用

    例如

    <Style TargetType="{x:Type Button}">
        ...
    </Style>
    

    创建一个会自动影响按钮的样式

    链接地址: http://www.djcxy.com/p/21235.html

    上一篇: WPF styles: difference between x:Name and x:Type

    下一篇: INotifyPropertyChanged vs. DependencyProperty in ViewModel