《Practical WPF Charts and Graphics 》翻译——之五
2012-07-09 18:23
651 查看
创建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,Height和Width。每一个特性和Window类里的每一个属性相关。这些特性告诉WPF创建一个标题叫FirstWPFProgram的300*300的窗体。
在Window标签里面是一个包含一个Text属性为“Hello,WPF”的TextBlock的Grid控件。你也可以使用下面的一小段语句创建相同的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.xaml和window1.xaml.cs文件并添加一个新的WPF Windows到项目中。命名为StartMenu,会增加两个文件,StartMenu.xaml 和StartMenu.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。
为了实现例子的目标,你需要在后头代码里程序化操作TextBlock,TextBox和 Button控件。在这个例子中,这些控件叫做textBlock和textBox。尽管在一个传统的Windows Forms应用程序里每一个控件都有一个名字,在一个WPF应用程序里,你只需要给需要程序化操作的元素进行命名。这里,举个例子,你不需要命名Grid,StackPanel和Button控件。
创建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,Height和Width。每一个特性和Window类里的每一个属性相关。这些特性告诉WPF创建一个标题叫FirstWPFProgram的300*300的窗体。
在Window标签里面是一个包含一个Text属性为“Hello,WPF”的TextBlock的Grid控件。你也可以使用下面的一小段语句创建相同的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.xaml和window1.xaml.cs文件并添加一个新的WPF Windows到项目中。命名为StartMenu,会增加两个文件,StartMenu.xaml 和StartMenu.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。
为了实现例子的目标,你需要在后头代码里程序化操作TextBlock,TextBox和 Button控件。在这个例子中,这些控件叫做textBlock和textBox。尽管在一个传统的Windows Forms应用程序里每一个控件都有一个名字,在一个WPF应用程序里,你只需要给需要程序化操作的元素进行命名。这里,举个例子,你不需要命名Grid,StackPanel和Button控件。
相关文章推荐
- 《Practical WPF Charts and Graphics 》翻译——之八
- 《Practical WPF Charts and Graphics 》翻译——之九
- 《Practical WPF Charts and Graphics 》翻译——之二
- 《Practical WPF Charts and Graphics 》翻译——之11章 曲线拟合(2)
- 《Practical WPF Charts and Graphics 》翻译——之三
- 《Practical WPF Charts and Graphics 》翻译——之四——第1章
- 《Practical WPF Charts and Graphics 》翻译——之十
- 《Practical WPF Charts and Graphics 》翻译——之11章 曲线拟合(1)
- 《Practical WPF Charts and Graphics 》翻译——之十一
- 《Practical WPF Charts and Graphics 》翻译——之六
- 《Practical WPF Charts and Graphics 》翻译——之七——第2章
- Practical C# Charts and Graphics
- Practical WPF Graphics Programming
- Create Snazzy Web Charts and Graphics On the Fly with the .NET Framework
- 浅谈“be practical and realistic”
- 【转】WPF Performance and .NET Framework Client Profile
- c++builder E2015 Ambiguity between ‘Gdiplus::Graphics::Graphics(void *)’ and ‘Gdiplus::Graphics::Graphics(void *,int)’
- Animation and Graphics-- overview
- Mathematics for 3D Game Programming and Computer Graphics - Rotation Transforms
- [转] WPF – Editing Mode with Save and Cancel Capability