《Practical WPF Charts and Graphics 》翻译——之五

创建XAML文件

创建XMAL文件有一些标准。首先,XAML文件里的每一个元素都是一个.NET类的实例。元素的名称必须和类的名称精确匹配。例如<TextBock>告诉WPF创建一个TextBlock对象。

在XAML文件里,你可以将一个元素嵌套到另一个元素里面。这样,那就可以将一个元素作为一个孩子放入另一个元素。例如,你可以在Canvas里放一个Button,这就是意味着你的UI包含一个拥有一个Button孩子的Canvas。你可以通过设置特性来对每一个元素的属性进行设置。

让我们看一下一个简单的XAML文件的结构:

<Windowx:Class="WPFOverview.FirstWPFProgram"
   xmlns="http://schemas.micro.softcom/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title=" FirstWPFProgram" Height="300"Width="300">
    <Grid>
        <TextBlock>Hello,WPF!</TextBlock>
    </Grid>
</Window>

这个文件包含3个元素:一个顶层的Window元素,它表示这个窗体;一个 Grid和一个作为孩子放在 Grid里的 TextBlock,你可以使用一个Windows或者一个Page作为WPF顶层元素。一个Page和Window类似,但是它用于可以导航的应用程序。WPF包含一个Application文件用来定义应用程序资源和启动设置。如果你开始一个新的WPF Window(或者Page)项目,Visual Studio将自动生成一个叫做 App.xaml的Application文件,在本书中,我将使用Window作为WPF顶层元素,尽管你可以一样简单地使用Page。

Window元素的开始标签包含一个类名和两个XML命名空间。这个xmlns特性是一个XML里的专用特性,留作声明命名空间。前面小段代码中的两个命名空间将出现在所有WPF XAML文件中。你只需要知道这些命名空间简单地允许XAML解释器找到正确的类。这三个标签的属性也需要注意:Title,HeightWidth。每一个特性和Window类里的每一个属性相关。这些特性告诉WPF创建一个标题叫FirstWPFProgram的300*300的窗体。

在Window标签里面是一个包含一个Text属性为“Hello,WPF”的TextBlockGrid控件。你也可以使用下面的一小段语句创建相同的TextBlock:

<TextBlockText="Hello, WPF!"/>

后台代码文件

XAML用来给你的应用程序创建UI;但是为了使你的应用程序工作,你需要添加一些事件处理器到UI上。XAML使用下面的类的特性让这变得简单:

<Windowx:Class="WPFOverview.FirstWPFProgram"… … >

X命名空间前缀在XAML命名空间里放置类特性,这意味着这是XAML语言里更常见的部分。这个例子创建了一个叫做 WPFOverview.FirstWPFProgram的新类,继承自Window基类。

当你创建一个WPF应用程序时,Visual Studio 自动生成一个partial类,在里面你可以放置你的事件处理代码。前面我们讨论了一个简单的XAML文件WPFOverview.xaml。如果你创建一个叫做FirstWPFProgram的WPF Windows应用程序,Visual Studio将自动生成下面的后台代码文件:

using System;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Media;
 
namespaceFristWPFProgam
{
    /// <summary>
    /// Interaction logic forFirstWPFProgram.xaml
    /// </summary>
 
public partial class FirstWPFProgram : Window
{
        publicFirstWPFProgram()
        {
           InitializeComponent();
        }
}
}
 

当你编译这个应用程序,XAML被解释成一个与后台类文件(例子中的 FirstWPFProgram.xaml.cs)逻辑合并到一起的CLR类型的声明,由此来形成一个单独的单元。

前面的后台文件只包含一个默认的构造器,当你创建类的实例的时候叫做InitializeComponent方法。这个和Windows Forms里的C#类类似。

你的第一个WPF应用程序

我们来考虑一个简单的WPF例子。打开Visual Studio 2008,创建一个叫做WPFOverview.的新的WPF Windows Application。从项目中移除默认的window1.xamlwindow1.xaml.cs文件并添加一个新的WPF Windows到项目中。命名为StartMenu,会增加两个文件,StartMenu.xamlStartMenu.xaml.cs到项目中。打开App.xaml文件,将StartupUri属性从window1.xmal改变为StartMenu.xaml。通过这些操作,你将StartMenu窗体作为主要的菜单窗体,通过它你可以使用所有项目里的例子。你可以检查这两个文件的源代码去看他们是怎么实现的。这个文件结构将贯穿整本书的每一章,用来使用代码例子。添加另一个新的WPF Window到项目中,命名为FirstWPFProgram。图1-1显示这个例子的运行结果。它包含一些控件:一个Grid,WPF程序里最常见的用于组织布局的控件,一个放置在Grid里的StackPanel,用来放置其他控件,包括一个TextBlock,一个TextBox和两个Button控件。这个例子的目的是当用户在TextBox里输入文字的时候改变TextBlock里的文字。同时,当用户点击ChangeText Color 或者ChangeText Size按钮的时候,TextBlock文字的颜色或字体大小会改变。


图1-1 你的第一个WPF程序例子


XAML属性

打开默认的 FirstWPFProgrm.xaml文件,添加下面的代码到文件中:

<Windowx:Class="WPFOverview.FirstWPFProgram"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title=" FirstWPFProgram"Height="300" Width="300">
    <Grid>
        <StackPanel>
            <TextBlockName="textBlock" Margin="5"
               TextAlignment="Center"
                Text="Hello WPF!"/>
            <TextBoxName="textBox" Margin="5" Width="200"
               TextAlignment="Center"
               TextChanged="OnTextChanged"/>
            <Button Margin="5"Width="200"
                Content="Change TextColor"
               Click="btnChangeColor_Click"/>
            <Button Margin="5"Width="200"
                Content="Change TextSize"
               Click="btnChangeSize_Click"/>
        </StackPanel>
    </Grid>
</Window>

你可以看到元素的特性和相应对象的属性相关。例如,前面XAML文件中的TextBlock控件配置了name,margin, text alignment和text:

<TextBlockName="textBlock" Margin="5"
           TextAlignment="Center"Text="Hello WPF!"/>

为了让这些能工作,WPF里的TextBlock类必须提供相关的属性。你为其他控件指定各种属性将很少影响到你的布局和UI。 为了实现例子的目标,你需要在后头代码里程序化操作 TextBlockTextBoxButton控件。在这个例子中,这些控件叫做 textBlocktextBox。尽管在一个传统的Windows Forms应用程序里每一个控件都有一个名字,在一个WPF应用程序里,你只需要给需要程序化操作的元素进行命名。这里,举个例子,你不需要命名 GridStackPanelButton控件。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值