XAML对象元素语法

Posted xiaowie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XAML对象元素语法相关的知识,希望对你有一定的参考价值。

1.对象元素语法

使用开闭标签将对象定义一个XML元素,这种语法与其他标记语言如html的元素语法非常相似,在以左右尖括号保卫要设置的类或结构的类型名称。对象元素可以声明0个或多个属性,以一个或多个空格来分割每个“属性名=值“

对,例如 下面使用对象元素语法设置一个TextBox对象并设置其Content和FontSize属性和命名空间

  <TextBox FontSize="10">这是一个textBox控件</TextBox>     <textbox> </textbox>  <textbox /> 这个样才是一个对象

 

 

2.属性语法

  属性语法对于简单类型的属性赋值场合非常便利,但是对于一些本身就是复杂类型的属性来说,使用属性语法会有些难于理解,甚至难于实现

  一个比较单行的复杂属性是Background属性,通常使用如下的语法来为UI是对象设置背景色如下

<Button Content="登录" Background="Red" ></Button>

 

这里直接为Background赋一个颜色值,XAML解析器会使用BrushConverter转换器将这个字符串转换为一个Brush类的派生对象。在.NET中,Brush类实际上是一个抽象类,因此对于Background属性

也可以使用渐变画刷,如果需要为背景设置渐变,使用上面的属性语法代码是很困难的,所幸的是XAML也提供了另外一种属性的方法。

 

3.属性元素语法

  属性元素语法允许在元素累不使用”元素名.属性名“的语法来设置复杂的属性,类似于一个元素中的子元素一样。例如 上面设置单色背景的属性语法,也可以改用属性元素语法来设置

  

  <Button Content="登录"  >
            <Button.Background>
                <SolidColorBrush Color="Red" />
            </Button.Background>
        </Button>

如果使用vs设置属性元素语法,会发现在<button.Background>属性元素之间,提供了多种可供设置的属性看。如果非要走极端也可以这么写

  <Button Content="登录"  >
            <Button.Background>
                <SolidColorBrush>
                    red
                </SolidColorBrush>
            </Button.Background>
        </Button>

 

 

 

标记扩展特性

  在一些情况下,属性的值并不能再编写代码时就能够知道,可能需要在运行时由程序产生,或者由用户产生。或者说,开发人员希望从一个已经存在的空间的某个值来设置其他空间属性值。

标记扩展可以使用在内嵌元素标记或者是XAML属性语法中,对于属性语法,通常使用大括号包围其语法。而对于属性元素语法,标记扩展在外观上与其他任何用于提供属性元素之的元素相同,即一个将标记扩展类作为一个元素引用并以尖括号(<>)扩起的

XAML元素声明。下面使用属性语法来应用标记扩展,在代码中将为Button 的前景色职位为SystemColor类中的静态属性ActiveCaptionBrush

 <Button Content="登录"  Background="{x:Static SystemColors.ActiveBorderBrush}" />

这段代码中,标记扩展使用{MarkupExtension 派生类 参数}。在本例中标记扩展是一个StaticExtension类。X前缀指示StaticExtencion可以在XAMl命名空间中找到,也有很多标记扩展属于WPF命名空间,因此没有X前缀。

使用属性元素语法

 <Button Content="登录">
            <Button.Foreground>
                <x:Static Member="SystemColors.ActiveCaptionBrush"></x:Static>
            </Button.Foreground>
        </Button>

 

附加属性

  附加属性是指定义在不同类中的属性可以被应用到其他的控件。在WPF中,附加属性常常用来作为布局属性。

在WPF中,每个控件都有其内在的属性,比如,一个文本框控件有特定的字体、颜色和文本内容等,但是当将这个控件放到一个容器控件中时,依赖于不同的容器

控件能够进行一些在影响控件在容器中的特性的属性设置,这通常通过添加附加属性来进行设置。

  附加属性使用两部分的语法表示形式:类型定义.属性名称,使用这种命名方式,XAML解析器能够区别标准属性与附加属性。下面演示附加属性的一个用法

 假定想要为StackPanel中的textblock对象设置字体的大小,可以使用下列代码

  

  <StackPanel TextBlock.FontSize="18">
        <TextBlock >这个是一个block控件</TextBlock>
        <TextBlock FontSize="9">这个是第二个控件</TextBlock>
    </StackPanel>

以上代码为Stackpanel指定了一个Textblock.FontSize附加属性,指定了字体为18,可以看到,如果不单独指定textblock的字体大小,则会使用Stackpanel中定义的大小

 

附加属性其实并不是属性,他们实际上会被转换为方法调用,XAMl解析器经调用一组静态方法,这些方法一DefiningType.SetPropertyName(也就是类型.SET属性)

的形式进行调用,因此,对于上面XAMl代码,也可以使用如下的C#程序代码来设置附加属性

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            TextBlock.SetFontSize(stackpanel1,40);
        }

  为了在代码中Stackpanel对象应用附加属性,在XAMl中需要为其设置Name属性

 

以上是关于XAML对象元素语法的主要内容,如果未能解决你的问题,请参考以下文章

XAML序列化 - 需要指定属性

WFP10天修炼 - XAML语言

深入浅出WPF的目录

WPF中 PropertyPath XAML 语法

jquery 对象的 heightinnerHeightouterHeight 的区别以及DOM 元素的 clientHeightoffsetHeightscrollHeightoffset(代码片段

《C#高级编程》读书笔记(二十):核心XAML