首页 文章

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

提问于
浏览
6

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

x:Name="xyz"

x:Type="xyz".

并且可以在XAML中引用这种样式,如 .

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

FIXES: 这个问题完全错了 . 打算要问的是x:Key和x:Name之间的区别 . 但是没有't go trying this code myself, but was just relying on memories - thought I have both in ResourceDictionary, which was wrong. And I also didn' t这样的代码

<xxx.Resources >

部分,因为它也不起作用 . 你不能引用没有x:Key的样式(x:Name在这里不起作用),并且添加两个没有x的样式:Key抛出异常,因为它们在字典中都得到相同的(空?)键 .

Ray非常好地表达了所有的不同,谢谢 .
我的错

2 回答

  • 2

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

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

    例如

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

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

  • 9

    This is a trick question. 实际上,您使用其中任何一个在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 是可以在元素上使用的属性 .

相关问题