WPF中控件绑定XML文件,实现修改XML文件即可以改变程序控件内容

       最近一直在研究WPF这个微软提供的用于设计软件产品界面的类库,WPF有一个明显的好处,就是界面设计与界面功能代码编写完全分离,而且从真正意义上实现了数据驱动程序的原理,对于目前正在做软件产品设计的产品设计师们,是一个很大的福音啊.

       在正式开始介绍本章内容之前,请大家确保已经准备好了以下工具:

       1. Microsoft Express Blend4

       2. Microsoft Visual Studio 2010

       3. 一款XML文件的编辑器工具(网上好多,其实用记事本就可以编辑)

       在大家准备好以上工具之后,就开始准备整个项目的神奇之旅吧!!!


       步骤一:

       打开Blend4工具,建立一个工程(注意选择WPF应用程序),选择.Net FrameWork的版本为4.0


       步骤二:

       在Blend4工具上的"控件"项中,分别像Form中拖入一个Menu菜单并命名为"SysMenu",一个TreeView树型控件并命名为"SysTreeView",以及一个TabControl控件,并命名为"SysTabControl".


       步骤三:

       打开编辑XML文件的工具,分别编写供Menu以及TreeView使用的XML文件,分别命名为Menu.xml以及TreeView.xml

       1. Menu.xml    

       <?xml version="1.0" encoding="utf-8" ?>
       <menu>
	      <menuitem Name="File">
	          <menuitem Name="Open" />	 
	          <menuitem Name="Open Recent" />
	          <menuitem Name="Save" />
	          <menuitem Name="Exit" />
	      </menuitem>
	      <menuitem Name="Tool">
	          <menuitem Name="Verify" />	 
	          <menuitem Name="Sign" />
	          <menuitem Name="Compare" />
	          <menuitem Name="Check" />
	      </menuitem>
      </menu>
       2. TreeView.xml     
<?xml version="1.0" encoding="utf-8" ?>
<item>
	<viewitem name="Management">
		<viewitem name="First">
			<viewitem name="information" />
			<viewitem name="download file" />
			<viewitem name="delete file" />
			<viewitem name="execute file" />
		</viewitem>
		<viewitem name="Second">
			<viewitem name="information" />
			<viewitem name="download file" />
			<viewitem name="delete file" />
			<viewitem name="execute file" />
		</viewitem>
	</viewitem>
</item>

  
       步骤四:

       修改MainWindow.xaml文件中的Menu以及TreeView控件中的Item显示模板,具体修改部分为:      

        <Menu Name="SysMenu"  Height="31" VerticalAlignment="Top" Style="{DynamicResource MFaceStyle}">
            <Menu.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding XPath=menuitem}">
                    <TextBlock Text="{Binding XPath=@Name}" />
                </HierarchicalDataTemplate>
            </Menu.ItemTemplate>
        </Menu>
        <TreeView Name="SysTreeView"  HorizontalAlignment="Left" Margin="4,35,0,4" Width="200">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding XPath=viewitem}">
                    <TextBlock Text="{Binding XPath=@name}" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

       步骤五:

       修改MainWindow.xaml.cs中内容

       1. 将XML文件作为数据源绑定到Menu中

        private void LoadMenuItem()
        {
            string xmlpath = Directory.GetCurrentDirectory() + "\\Menu.xml";

            XmlDocument xml = new XmlDocument();
            xml.Load(xmlpath);

            XmlDataProvider xdp = new XmlDataProvider();
            xdp.Document = xml;
            xdp.XPath = @"/menu/menuitem";

            this.SysMenu.DataContext = xdp;
            this.SysMenu.SetBinding(Menu.ItemsSourceProperty, new Binding());
	}
       2. 将XML文件作为数据源绑定到TreeView中

        private void LoadTreeView()
        {
            string xmlpath = Directory.GetCurrentDirectory() + "\\TreeView.xml";

            XmlDocument xml = new XmlDocument();
            xml.Load(xmlpath);

            XmlDataProvider xdp = new XmlDataProvider();
            xdp.Document = xml;
            xdp.XPath = @"/item/viewitem";

            this.SysTreeView.DataContext = xdp;
            this.SysTreeView.SetBinding(TreeView.ItemsSourceProperty, new Binding());
        }
       3. 增加选择TreeView中的Item后,修改TabControl控件中Tab的标题

        private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            TextBlock tb = (TextBlock)sender;

            if (tb.Text == "information")
            {
                ((TabItem)this.SysTabControl.Items[0]).Header = tb.Text;
            }
            else if (tb.Text == "download file")
            {
                ((TabItem)this.SysTabControl.Items[0]).Header = tb.Text;
            }
            else if (tb.Text == "delete file")
            {
                ((TabItem)this.SysTabControl.Items[0]).Header = tb.Text;
            }
            else if (tb.Text == "execute file")
            {
                ((TabItem)this.SysTabControl.Items[0]).Header = tb.Text;
            }
            else
            {
                ((TabItem)this.SysTabControl.Items[0]).Header = "初始信息";
            }
        }

       4. 增加初始化内容

       public MainWindow()
	{
	    this.InitializeComponent();

	    // 在此点下面插入创建对象所需的代码。
            LoadMenuItem();
            LoadTreeView();            
	}

       步骤六:

       保存Blend4编译的工程文件后,使用VS2010打开工程并编译,就能看到效果啦!!!!!!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用WPF读取XML文件的示例程序: MainWindow.xaml ```xml <Window x:Class="WpfXmlReader.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="XML Reader" Height="350" Width="525"> <Grid> <StackPanel> <TextBlock Text="XML File Path:"/> <TextBox x:Name="txtXmlFilePath"/> <Button Content="Read XML" Click="btnReadXml_Click"/> <ListBox x:Name="lstXmlData"/> </StackPanel> </Grid> </Window> ``` MainWindow.xaml.cs ```csharp using System.Windows; using System.Xml; namespace WpfXmlReader { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void btnReadXml_Click(object sender, RoutedEventArgs e) { lstXmlData.Items.Clear(); string xmlFilePath = txtXmlFilePath.Text.Trim(); if (!string.IsNullOrEmpty(xmlFilePath)) { try { // Load the XML file XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlFilePath); // Read the XML data XmlNodeList nodes = xmlDoc.SelectNodes("//book"); foreach (XmlNode node in nodes) { string title = node.SelectSingleNode("title").InnerText; string author = node.SelectSingleNode("author").InnerText; string price = node.SelectSingleNode("price").InnerText; lstXmlData.Items.Add(string.Format("Title: {0}\tAuthor: {1}\tPrice: {2}", title, author, price)); } } catch (XmlException ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } else { MessageBox.Show("Please enter XML file path.", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning); } } } } ``` 在此示例,我们在窗口添加了一个文本框和一个按钮,用于输入XML文件的路径并读取XML数据。我们还添加了一个列表框,用于显示读取的XML数据。 在“Read XML”按钮的单击事件处理程序,我们首先清除列表框的所有项。然后,我们从文本框获取XML文件的路径,并使用XmlDocument类加载XML文件。接下来,我们选择所有的“book”节点,并使用SelectSingleNode方法读取每个节点的“title”、“author”和“price”元素的InnerText属性。最后,我们将读取的数据添加到列表框。 如果加载XML文件时发生异常(例如,文件不存在或格式不正确),我们将通过MessageBox.Show方法显示错误消息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值