[笔记/简译]XAML揭秘(6)
来源:互联网 发布:手机必装软件 编辑:程序博客网 时间:2024/05/30 04:39
XAML和程序代码的混合
WPF应用程序可以完全由任何.NET语言编写而成,简单的应用程序也可以完全由XAML写成,但大多数WPF应用程序则是由XAML和程序代码混合而成的。
在运行时加载和解析XAML
System.Windows.Markup命名空间中的XamlReader和XamlWriter分别用于读取XAML和写入XAML。XamlReader定义了一些重载的静态方法Load,XamlWriter定义一些重载的静态方法Save。
XamlReader
XamlReader.Load方法用于解析XAML文件、创建合适的.NET对象以及返回根元素的实例。假设当前目录包含XAML文件MyWindow.xaml,则可以通过下例方法加载并取得Window对象:
Window window = null;
using (FileStream fs =
new FileStream("MyWindow.xaml", FileMode.Open, FileAccess.Read))
{
// 获得根元素Window
Window win = (Window)XamlReader.Load(fs);
}
XamlReader类还定义了LoadAsync实例方法用以异步加载XAML文件。在加载较大文件或通过网络加载时,为了用户界面能够及时响应,则可以考虑使用异步模型。
假设Window拥有一个StackPanel类型的子元素,且该子元素的第5个子元素为OK按钮,则下面示例可以获得它们的引用(接上例):
StackPanel panel = (StackPanel)window.Content;
Button okButton = (Button)panel.Children[4];
此后就可以使用Button的引用来完成一些XAML做不到的事情,比如调用按钮类的某个方法、设置额外的属性或者附加事件处理器等。
为XAML元素命名
XAML语言命名空间中包含一个Name关键字,它用来设置元素的名称,如下(该用法实际上有误,因为x:Name需和x:Class一同使用,此处仅为示意):
<Button x:Name="okButton">OK</Button>
改动之后对应的C#代码将会更一般化,如下:
Button okButoon = (Button)window.FindName("okButton");
FindWindow方法并不是Window类的方法,它定义在FrameworkElement和FrameworkContentElement类中。这两个类都是WPF中非常重要的类。
x:Name可以用来命名元素,但是某些类定义了可以被当作元素名称的属性(通过添加System.Windows.Markup.RuntimeNamePropertyAttribute实现),如FrameworkElement和FrameworkContentElement中都有Name属性,它们被标记为RuntimeNameProperty(“Name”)。这说明我们在这种元素上可以简单地通过设置Name属性来为其设置名称,而无需使用x:Name。我们可以在这两种方法中选择一种使用,但不可两种都用。XAML提供这种机制的目的是为了在程序代码中可以方便地使用Name属性,否则将不得不在XAML文件中同时设置Name和x:Name的值。
(这里的所说的为XAML元素命名实际上包含两重含义。第一重是说,通过某些元素的Name属性或通过x:Name关键字,可以为元素指定一个名称。这个名称被看做一个key值,可以通过FrameworkElement的FindName方法获得相应的value值,该值即为那个元素的引用。第二重是说,如果在VS中使用code-behind文件和分部类,VS将会自动创建一个该元素类型的变量,且这个变量的名称与该元素的名称相同。如上例,Button的Name属性值为okButton,则在分部类中,可以直接通过名为okButton的变量引用该按钮对象。此外,对于那些标记了RuntimeNameProperty(“Name”)的类型,无论是通过Name属性还是x:Name关键字设置的XAML元素名称,在程序代码中都可以通过Name属性获得,如下例:
XAML
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyWindow">
<Button Content="OK" x:Name="okButton" />
</Window>
C#
public partial class Window1 : System.Windows.Window
{
public Window1()
{
InitializeComponent();
System.Diagnostics.Debug.WriteLine(this.okButton.Name);
}
}
调试运行程序,将会看到调试控制台显示“okButton”。)
- [笔记/简译]XAML揭秘(6)
- [笔记/简译]XAML揭秘(6)
- [笔记/简译]XAML揭秘(1)
- [笔记/简译]XAML揭秘(2)
- [笔记/简译]XAML揭秘(3)
- [笔记/简译]XAML揭秘(4)
- [笔记/简译]XAML揭秘(5)
- [笔记/简译]XAML揭秘(8)
- [笔记/简译]XAML揭秘(1)
- [笔记/简译]XAML揭秘(2)
- [笔记/简译]XAML揭秘(3)
- [笔记/简译]XAML揭秘(4)
- [笔记/简译]XAML揭秘(8)
- XAML揭秘
- XAML揭秘
- WPF笔记1-App.xaml & MainWindow.xaml
- WPF笔记--XAML
- XAML学习笔记1
- Sql server 数据库优化
- 学习SDK文档的步骤大概是这样
- [笔记/简译]XAML揭秘(3)
- [笔记/简译]XAML揭秘(4)
- 谈谈360与QQ之我见
- [笔记/简译]XAML揭秘(6)
- Epub网络资源整理
- NO.41 Web系统性能优化 1.简述(Linux+Weblogic+Oracle)
- 文本框CSS
- 每位开发人员都应铭记的10句编程谚语
- [笔记/简译]XAML揭秘(8)
- Ubuntu下的dos2unix
- simhash算法的原理
- shell判断文件是否存在