tft每日頭條

 > 科技

 > wpf 常用控件

wpf 常用控件

科技 更新时间:2024-12-28 14:43:21

副标題:在WPF中快速顯示XML文件

介紹

在本文中,我将描述如何在WPF應用程序中使用TreeView控件顯示包含在簡單XML文件中的數據,而無需編寫任何代碼。在本文中,所有的内容都可以在定義窗口内容的XAML文件中找到。雖然,你不會編寫這種看似無用的應用程序,但是,了解這些可以讓你對業務和應用程序的組合更加的熟悉。

使用代碼

實際上,使用WPF顯示XML數據相當容易。除了XML文件本身之外,幾乎所有實現這一點的工作都是在XAML中完成的,其中大部分工作是通過定義幾個資源來完成的。本文提供的源代碼是一個完整的工作示例。該項目被配置為使用.NET 4.0,但您可以将MainWindow.xaml和data.xml移動到WPF 3.0項目中,它也應該可以正常工作。

創建WPF應用程序時,将在Visual Studio編輯器中打開的名為MainWindow.xaml的文件中創建一個Window窗口。其中包含了一些簡單的XAML代碼,用于配置帶有Grid控件的默認窗口,以及容納窗口的其餘可視元素。在我們的代碼中,我們在Grid标記之前和Window标記下面的空白處添加了一個新的子元素Window.Resouces,以便在窗口中創建一個區域來定義一些資源。首先,參考資料部分如下所示:

<Window.Resources> </Window.Resources>

然後在這些Window.Resources标記之間,我們添加了幾個元素,這些元素将被UI用來顯示XML數據。我們添加的第一個資源是XmlDataProvider。XmlDataProvider是一個類,它可以将XML數據綁定到元素并使用XML結構。對象是通過創建資源來創建的,如下所示:

<XmlDataProviderx:Key="xmldata"Source="data.xml"XPath="/root" />

Source屬性被設置為我們為測試創建的XML文件的名稱,但它在運行時實際上并不引用文件。通過将文件放在項目的根目錄中,并将其生成操作設置為“Resource”,文件的内容實際上在編譯時成為程序集的一部分。因此在本例中,文件名成為資源的Key名稱,WPF非常聰明,可以在程序運行時計算出詳細信息。XPath屬性用于指定節點。XML測試文件有一個名為“root”的根節點,因此我們在這裡使用它來開始對該節點的XML解析。

wpf 常用控件(在WPF中使用TreeView控件顯示XML文件)1

<?xmlversion="1.0"encoding="utf-8"?> <root> <省name="北京"> <市name="北京市"> <區name="東城區"/> <區name="西城區"/> <區name="朝陽區"/> <區name="豐台區"/> <區name="石景山區"/> <區name="海澱區"/> </市> </省> <省name="四川"> <市name="成都市"> <區name="錦江區"/> <區name="青羊區"/> <區name="金牛區"/> <區name="武侯區"/> <區name="成華區"/> <區name="龍泉驿區"/> </市> </省> </root>

真正有趣的工作是在使用HierarchicalDataTemplate創建的數據模闆中完成的。同樣,在Window.Resources元素中,在XmlDataProvider的正下方,我們為XML測試文件中使用的每種類型的标記創建一個數據模闆。在本例中,data.xml中存在四個節點項,“root”、“省”、“市”和“區”。所以我們創建了四個數據模闆。具體的模闆如下所示:

<HierarchicalDataTemplateDataType="省"ItemsSource="{BindingXPath=./*}"> <StackPanelOrientation="Horizontal"> <TextBlockMargin="0"Text="省:" /> <TextBlockMargin="5,0,0,0"Text="{BindingXPath=@name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplateDataType="市"ItemsSource="{BindingXPath=./*}"> <StackPanelOrientation="Horizontal"> <TextBlockMargin="0"Text="市:" /> <TextBlockMargin="5,0,0,0"Text="{BindingXPath=@name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplateDataType="區"> <StackPanelOrientation="Horizontal"> <TextBlockMargin="0"Text="區:" /> <TextBlockMargin="5,0,0,0"Text="{BindingXPath=@name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplateDataType="root"ItemsSource="{BindingXPath=./*}"> <TextBlockMargin="0"Text="中國" /> </HierarchicalDataTemplate>

每個模闆基本類似。需要注意的主要區别是沒有為“區”節點指定ItemsSource屬性,因為我知道在“區”節點中沒有放置任何項。這樣的節點總是在行的末尾,因此沒有理由檢查它們的内容。ItemsSource屬性由HierarchicalDataTemplate專門為此用途提供。HierarchicalDataTemplate使用ItemsSource确定當前項是否包含其他項。否則,将相應地呈現該節點,并且無法進一步向下導航到該節點。但是,如果當前項中包含其他項,則将呈現該項,以便用戶可以深入到節點中查看其他項。

最後一件事是将XML數據綁定到UI控件。我通過設置Grid的DataContext和TreeView控件的ItemsSource屬性來實現。完整的UI隻在幾行内定義。

<GridDataContext="{StaticResourcexmldata}"> <TreeViewName="tree" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ItemsSource="{Binding}" VirtualizingStackPanel.IsVirtualizing="False" VirtualizingStackPanel.VirtualizationMode="Standard" /> </Grid>

wpf 常用控件(在WPF中使用TreeView控件顯示XML文件)2

重點

HierarchicalDataTemplate類使用XML數據填充TreeView變得非常容易。沒有理由不能在其他場景中使用它來幫助更複雜的情況。要記住的主要事情是為TreeView所期望的每種類型創建一個模闆(或者是父類型來捕獲多個降序類型),并在可能包含需要進入TreeView的更多數據的類型上設置ItemsSource。

摘要

在這篇短文中,我們已經了解了如何在WPF中使用TreeView控件來顯示簡單的XML文件的數據。祝各位好運,編碼愉快,擺脫996,回歸955!

wpf 常用控件(在WPF中使用TreeView控件顯示XML文件)3

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved