none
xaml中子元素使用x:name命名(等价代码为"属性变量"名?),而其Resource却使用x:key(请问等价代码是什么?).请问为什么Resource不用与子元素一套的机制? RRS feed

  • 问题

  • xaml中子元素使用x:name命名(等价代码为"属性变量"名?),而其Resource却使用x:key(请问等价代码是什么?).请问为什么Resource不用与子元素一套的机制?谢谢
    2015年5月11日 8:46

答案

  • Hi Pingke.he,

    >>"xaml中子元素使用x:name命名(等价代码为"属性变量"名?)"

    首先XAML是一门语言(可扩展标记语言),它有自己的编译器,“x”是名称空间,而你所说的“x:Name”是专门写给xaml编译器看的,引导xaml编译器把xaml代码编译成CLR代码。

    其次xaml标签声明的是对象,一个标签对应一个对象,而xaml这种对象声明语言只负责声明对象却不负责为这些对象声明引用变量。如果我们需要为对象准备一个引用变量以便在C#代码中直接访问就必须显式的告诉xaml编译器为这个对象声明引用变量,这就是“x:Name”。

    >>"Resource却使用x:key(请问等价代码是什么?)"

    首先需要知道xaml这门语言主要是用来跟界面打交道的,而涉及到界面的,肯定会有样式(style),样式肯定会有多次使用的情况,因此可以把需要多次使用的内容提取出来放到资源字典中(Resource Dictionary),需要使用这个资源的时候,就用它的key来把它检索出来。

    在xaml代码中,假如你定义了一个资源:

    <Window.Resources>
            <DataTemplate x:Key="mytemplate">
                <Button></Button>
            </DataTemplate>
        </Window.Resources>

    在code-behind中,假如你要用代码获取这个资源,来指定给其他对象,可以使用FindResource()方法:

    DataTemplate template = this.FindResource("mytemplate") as DataTemplate;

    >>"为什么Resource不用与子元素一套的机制?"

    我不是很清楚你所说的机制是什么,我觉得这是两个不一样的东西,一个对应资源,一个对应对象。

    x:Key唯一地标识作为资源创建和引用且存在于 ResourceDictionary 中的元素。
    x:Name 唯一标识对象元素,以便于从代码隐藏或通用代码中访问实例化的元素。
    x:key和x:name的区别,前者是为xaml中定义的资源文件提供唯一的标识,后者是为xaml中定义的控件元素提供唯一标识。

    这里有个关于XAML语言的文档,你可以参考下XAML概述

    Best Regards,

    Xavier Eoro


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2015年5月12日 2:58
    版主