wpf 中 datatemplate的简单使用,下面例子包含了三个常用的使用。
第一个例子:
前台:
<Window x:Class="TestDataTemplate.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="380" Width="544" Loaded="Window_Loaded" WindowStartupLocation="CenterScreen">
<Window.Resources>
<DataTemplate x:Key="listItemTemplate">
<Border BorderThickness="1" CornerRadius="5">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="10,0,5,0" Text="{Binding ID}" Foreground="Green" Width="50" TextAlignment="Center"/>
<TextBlock Margin="10,0,5,0" Text="{Binding Name}" Foreground="Green" Width="100" TextAlignment="Center"/>
<TextBlock Margin="10,0,5,0" Text="{Binding Sex}" Foreground="Green" Width="50" TextAlignment="Center"/>
<TextBlock Margin="10,0,5,0" Text="{Binding Age}" Foreground="Green" Width="50" TextAlignment="Center"/>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="textItemTemplate">
<Border BorderBrush="Red" BorderThickness="1" CornerRadius="5">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="10,0,5,0" Text="ID:" Foreground="Green" Width="20" />
<TextBlock Margin="0,0,5,0" Text="{Binding ID}" Foreground="Green" Width="50"/>
<TextBlock Margin="0,0,5,0" Text="Name:" Foreground="Green" Width="50" />
<TextBlock Margin="10,0,5,0" Text="{Binding Name}" Foreground="Green" Width="100"/>
<TextBlock Margin="10,0,5,0" Text="Sex:" Foreground="Green" Width="50" />
<TextBlock Margin="10,0,5,0" Text="{Binding Sex}" Foreground="Green" Width="50"/>
<TextBlock Margin="10,0,5,0" Text="Age:" Foreground="Green" Width="50" />
<TextBlock Margin="10,0,5,0" Text="{Binding Age}" Foreground="Green" Width="50"/>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<Canvas>
<ListBox x:Name="listPerson" ItemTemplate="{StaticResource listItemTemplate}" Width="500" Height="200"/>
<UserControl Canvas.Top="210" Canvas.Left="0" Width="500" Height="100" ContentTemplate="{StaticResource textItemTemplate}"
Content="{Binding SelectedItem,ElementName=listPerson}"/>
<Button Canvas.Top="315" Width="57" Click="Button_Click">Test</Button>
</Canvas>
</Grid>
</Window>
后台:
public class Person //自己定义的一个简单类
{
public int ID { get; set; }
public string Name { get; set; }
public int Sex { get; set; }
public int Age { get; set; }
}
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
private List<Person> item;
public MainWindow()
{
InitializeComponent();
item = new List<Person>()
{
new Person(){ID =1000,Name="aaa",Sex=1,Age=30},
new Person(){ID =1001,Name="bbb",Sex=0,Age=31},
new Person(){ID =1002,Name="ccc",Sex=1,Age=3},
new Person(){ID =1003,Name="ddd",Sex=1,Age=32}
};
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
listPerson.ItemsSource = item;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
new subWindow().Show();
}
}
第二个例子:
前台:
<Window x:Class="TestDataTemplate.subWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:TestDataTemplate"
Title="subWindow" Height="500" Width="500" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded">
<Window.Resources>
<DataTemplate x:Key="myTemplate">
<StackPanel Orientation="Horizontal">
<Button Content="删除"/>
<Button Content="更改"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="myTemplate1">
<StackPanel Orientation="Horizontal">
<TextBlock Text="删除"/>
<TextBlock Text="更改"/>
</StackPanel>
</DataTemplate>
<my:ShowSex x:Key="HandleShowSex" />
<DataTemplate x:Key="textItemTemplate">
<Border BorderBrush="Red" BorderThickness="1" CornerRadius="5">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="10,0,5,0" Text="ID:" Foreground="Green" Width="20" />
<TextBlock Margin="0,0,5,0" Text="{Binding ID}" Foreground="Green" Width="50"/>
<TextBlock Margin="0,0,5,0" Text="Name:" Foreground="Green" Width="50" />
<TextBlock Margin="10,0,5,0" Text="{Binding Name}" Foreground="Green" Width="100"/>
<TextBlock Margin="10,0,5,0" Text="Sex:" Foreground="Green" Width="50" />
<TextBlock Margin="10,0,5,0" Text="{Binding Sex}" Foreground="Green" Width="50"/>
<TextBlock Margin="10,0,5,0" Text="Age:" Foreground="Green" Width="50" />
<TextBlock Margin="10,0,5,0" Text="{Binding Age}" Foreground="Green" Width="50"/>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<DataGrid AutoGenerateColumns="False" x:Name="grid" Margin="0,0,0,200">
<DataGrid.Columns>
<DataGridTemplateColumn Width="100">
<DataGridTemplateColumn.Header>
<TextBlock TextAlignment="Center" Width="80">姓名</TextBlock>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Height="30">
<TextBlock TextAlignment="Center" Text="{Binding Name}" HorizontalAlignment="Left" VerticalAlignment="Center" FontFamily="宋体"></TextBlock>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<Grid>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="性别"></TextBlock>
</Grid>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Height="30">
<TextBlock TextAlignment="Center" Text="{Binding Sex, Converter={StaticResource HandleShowSex}}" HorizontalAlignment="Center" VerticalAlignment="Center" FontFamily="宋体"></TextBlock>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="*">
<DataGridTemplateColumn.Header>
<Grid>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="操作"></TextBlock>
</Grid>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="删除"/>
<Button Content="更改"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<UserControl ContentTemplate="{StaticResource textItemTemplate}"
Content="{Binding SelectedItem,ElementName=grid}" Margin="0,293,22,121"/>
</Grid>
</Window>
后台:
/// <summary>
/// subWindow.xaml 的交互逻辑
/// </summary>
public partial class subWindow : Window
{
private List<Person> item;
public subWindow()
{
InitializeComponent();
item = new List<Person>()
{
new Person(){ID =1000,Name="aaa",Sex=1,Age=30},
new Person(){ID =1001,Name="bbb",Sex=0,Age=31},
new Person(){ID =1002,Name="ccc",Sex=1,Age=3},
new Person(){ID =1003,Name="ddd",Sex=1,Age=32}
};
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
grid.ItemsSource = item;
}
}
//ShowSex
public class ShowSex : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int data = int.Parse(value.ToString());
if (data == 1)
return "男";
else
return "女";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}