c# – Datagrid列可以在不同的行中包含不同类型的控件
发布时间:2020-12-15 04:31:20 所属栏目:百科 来源:网络整理
导读:在 Wpf中,我可以创建一个数据网格,其中不同的行在同一列中包含不同类型的控件吗? 最简单的情况:数据网格有5列,2行,不关心4个第一列,在第5列: 第1行:它是一个文本框 第2行:它是一个组合框. 谢谢! 解决方法 您可以使用DataGridTemplateColumn结合几个触
在
Wpf中,我可以创建一个数据网格,其中不同的行在同一列中包含不同类型的控件吗?
最简单的情况:数据网格有5列,2行,不关心4个第一列,在第5列: >第1行:它是一个文本框 谢谢! 解决方法
您可以使用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" }; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |