好久没写Blogs了,现在在看【WPF编程宝典】,决定开始重新写博客,和大家一起分享技术。
在编程时我们常希望界面是动态的,可以随时变换而不需要重新编译自己的代码。
以下是动态加载XAML的一个事例代码。
在debug文件夹下新建一个文本文件,重命名为:file.xaml
插入界面代码:
<DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Button Name="button1" Margin="30" Content="Pleas click me."></Button>
</DockPanel>
在VS新建LoadXAML.CS类。
public class LoadXAML :Window
{
private Button button1;
?
public LoadXAML(string xamlFile)
{
Width = Height = 285;
Left = Top = 100;
Title = "动态加载XAML";
?
DependencyObject rootElement;
using (FileStream fs=new FileStream(xamlFile, FileMode.Open))
{
rootElement =(DependencyObject) XamlReader.Load(fs);
?
}
Content = rootElement;
//查找控件(方法一)
//button1 = (Button) LogicalTreeHelper.FindLogicalNode(rootElement, "button1");
?
//查找控件(方法二)
FrameworkElement frameworkElement = (FrameworkElement) rootElement;
button1 = (Button) frameworkElement.FindName("button1");
?
button1.Click += button1_Click;
}
?
void button1_Click(object sender, RoutedEventArgs e)
{
button1.Content = "Thank you.";
}
?
修改App.xaml启动项
protected override void OnStartup(StartupEventArgs e)
{
var win = new LoadXAML("file.xaml");
win.Show();
}