XAML中x:XData指令元素的妙用
以下是XAML代码:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<XmlDataProvider x:Key="InventoryData" XPath="Supermarket">
<x:XData>
<Supermarket xmlns="" Name="Supermarket">
<Fruits Name="Fruits">
<Fruit Name="Peach"/>
<Fruit Name="Banana"/>
<Fruit Name="Orange"/>
</Fruits >
<Drinks Name="Drinks">
<Drink Name="Coca Cola"/>
<Drink Name="PEPSI Cola"/>
</Drinks>
</Supermarket>
</x:XData>
</XmlDataProvider>
<HierarchicalDataTemplate x:Name="dongjing" x:Key="xmltemplate" ItemsSource="{Binding}">
<TextBlock Text="{Binding XPath=@Name}"></TextBlock>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView x:Name="tv" Loaded="tv_Loaded_1" >
</TreeView>
</Grid>
</Window>
以下是C#后台代码非常经典 废话不多说 请看:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WpfApplication1;
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void tv_Loaded_1(object sender, RoutedEventArgs e)
{
XmlDataProvider source = this.FindResource("InventoryData") as XmlDataProvider;
Binding binding = new Binding();
binding.Source = source;
tv.SetBinding(TreeView.ItemsSourceProperty, binding);
HierarchicalDataTemplate liweike = this.FindResource("xmltemplate") as HierarchicalDataTemplate;
tv.ItemTemplate = liweike;
My dd = new My(tv);
}
}
class My : TreeView
{
TreeView dd;
public My()
{}
public My(TreeView a)
{
dd = a;
}
public void liweike()
{
My ddd = new My();
dd = ddd;
((My)dd).GetContainerForItemOverride();
}
}
}