WPF教程(六) XAML基础

在前面的章节,我们讨论了XAML是什么以及用它来做什么,那么如何用XAML来创建控件呢?接下来的例子,我们将会看到,用XAML创建一个控件,就和写它的名字一样简单,当然了,这个名字是用尖括号括起来的。譬如,按钮看起来是这样的:

<Button>
XAML标签通过编写 结束标签或者在 开始标签之后加一个 斜杠来结束:

<Button></Button>
或者

<Button />

大部分控件允许你在 开始标签结束标签之间放置控件所需的内容,譬如, 按钮控件允许你在开始标签和结束标签之间指定要显示的内容:

<Button>A Button</Button>

HTML是不区分大小写的,而XAML区分大小写,因为在.NET框架中,控件名字对应了一种类型。属性名称也一样,对应于控件的属性。下面是一个按钮,我们通过添加属性为其定义了两个特性:

<Button FontWeight="Bold" Content="A Button" />
我们先把字体属性设置成了 粗体,然后设置了内容属性,这个就 跟在开始标签和结束标签之间编写内容一样。但是,所有属性也可以像这样定义,它们以主控件的子标签的形式,中间用点隔开:

<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>A button</Button.Content>
</Button>
结果跟上面的代码是一样的,都是只涉及语法。其实,很多控件的内容里允许放置除了文本之外的东西,如其他控件。下面的例子展示了在一个按钮里面显示不同颜色的文字,它在按钮的内容里用了一些文本框控件。:

<Button>
    <Button.FontWeight>Bold</Button.FontWeight>
    <Button.Content>
        <WrapPanel>
            <TextBlock Foreground="Blue">Multi</TextBlock>
            <TextBlock Foreground="Red">Color</TextBlock>
            <TextBlock>Button</TextBlock>
        </WrapPanel>
    </Button.Content>
</Button>

内容属性只能放一个子元素,所以我们使用了一个WrapPanel控件来存放不同颜色的文本块。容器(Panel,如WrapPanel),在WPF里面扮演了一个非常重要的角色,我们将在以后详细讲述它的细节。现在我们只要知道它是存放其他控件的容易就行了。

下面的标记更加精准的达成了和上面一样的效果,这是另外一种表述:

<Button FontWeight="Bold">
    <WrapPanel>
        <TextBlock Foreground="Blue">Multi</TextBlock>
        <TextBlock Foreground="Red">Color</TextBlock>
        <TextBlock>Button</TextBlock>
    </WrapPanel>
</Button>


代码 vs XAML

上面的例子展示了XAML非常容易编写,但是有太多的方式可以去实现同一个目的。如果你还在为上面的例子用了那么多标记,只实现了一个带不同颜色文字的按钮而不爽的,那么来比较一下C#中的实现方法:

Button btn = new Button();
btn.FontWeight = FontWeights.Bold;

WrapPanel pnl = new WrapPanel();

TextBlock txt = new TextBlock();
txt.Text = "Multi";
txt.Foreground = Brushes.Blue;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Color";
txt.Foreground = Brushes.Red;
pnl.Children.Add(txt);

txt = new TextBlock();
txt.Text = "Button";
pnl.Children.Add(txt);

btn.Content = pnl;
pnlMain.Children.Add(btn);
当然上面的代码还可以写得更精简,还可以使用语法糖。然而结局对我来说还是一样:使用XAML描述界面更精简。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值