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

来源:互联网 发布:话剧暗恋桃花源知乎 编辑:程序博客网 时间:2024/05/20 11:47

创建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控件。



原创粉丝点击