在
Wpf中,我可以创建一个数据网格,其中不同的行在同一列中包含不同类型的控件吗?
最简单的情况:数据网格有5列,2行,不关心4个第一列,在第5列:
>第1行:它是一个文本框
>第2行:它是一个组合框.
谢谢!
解决方法
您可以使用DataGridTemplateColumn结合几个触发器来实现此功能.
这是一个演示应用程序,它将DataGrid绑定到(字符串)控件类型列表.第一列只显示控件类型字符串,第二列作用于相同的信息以显示相应的Control.您可能能够使xaml更简洁,但这是它的主旨:
XAML:
<Window x:Class="DataGridWithMultipleTypesPerColumn.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"> <Grid> <DataGrid ItemsSource="{Binding ControlTypes}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Control Type" Binding="{Binding}"/> <DataGridTemplateColumn Header="Actual Control"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ContentControl> <ContentControl.Style> <Style TargetType="ContentControl"> <Style.Triggers> <DataTrigger Binding="{Binding}" Value="TextBox"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <TextBox Text="Default Text"/> </DataTemplate> </Setter.Value> </Setter> </DataTrigger> <DataTrigger Binding="{Binding}" Value="CheckBox"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <CheckBox Content="Check Box"/> </DataTemplate> </Setter.Value> </Setter> </DataTrigger> <DataTrigger Binding="{Binding}" Value="Button"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <Button Content="Button"/> </DataTemplate> </Setter.Value> </Setter> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> </DataGrid> </Grid>
代码隐藏和视图模型:
namespace DataGridWithMultipleTypesPerColumn { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); this.DataContext = new viewmodel(); } } public class viewmodel { public ObservableCollection<string> ControlTypes { get; private set; } public viewmodel() { ControlTypes = new ObservableCollection<string>() { "Button","TextBox","CheckBox" }; } } }