C# 使用DataGrid的WPF UserControl,在XAML中添加额外的列

C# 使用DataGrid的WPF UserControl,在XAML中添加额外的列,c#,wpf,xaml,datagrid,user-controls,C#,Wpf,Xaml,Datagrid,User Controls,我正在尽可能地重用我正在编写的XAML 现在,我想在数据网格中显示我的对象。我的对象通过遗产共享一些共同属性。因此,我想创建一个带有网格的UserControl,并为每个对象的公共属性定义一些列。看起来是这样的: <UserControl Name="MyCustomGrid"> <Grid> <DataGrid> <!-- Common Settings --> ..

我正在尽可能地重用我正在编写的XAML

现在,我想在数据网格中显示我的对象。我的对象通过遗产共享一些共同属性。因此,我想创建一个带有网格的UserControl,并为每个对象的公共属性定义一些列。看起来是这样的:

<UserControl Name="MyCustomGrid">
    <Grid>
        <DataGrid>
            <!-- Common Settings -->
                ...
            <!-- /Common Settings -->
            <DataGrid.Columns>
                <ADataGridColumn Name="CommonProperty1"/>   
                <ADataGridColumn Name="CommonProperty2"/>
                ...
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</UserControl>

...
但我似乎无法在DataGrid.Columns下插入ContentControl

也许这不是我们要走的路


感谢您的帮助

您可以这样定义列;包括不同类型

<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn/>
        <DataGridCheckBoxColumn/>
        <DataGridComboBoxColumn/>
        <DataGridHyperlinkColumn/>
        <DataGridTextColumn/>
    </DataGrid.Columns>
</DataGrid>

但是为什么要将其封装在
UserControl
中,而不是对
DataGrid
实例本身进行封装呢?我建议为每个
DataGrid
指定列,因为将其放入
UserControl
中需要大量工作。或者在每个
DataGrid

都有相同的样式时使用样式,显示简单的附加列可能很容易,但以后可能需要范围、约束和验证,这将是无止境的工作。我认为OP关注的是“在运行时添加列”,现在他不关心列类型。@badaboom我知道不同的列类型。问题是,我有3个非常相似的网格,我必须对常用设置(而不仅仅是样式)进行3次修改。自动生成似乎并不理想,因为我有自定义列,并且希望列按特定顺序排列。我心里想的似乎不可能就这样。我将尽可能多地使用模板,以便DataGrids的XAML尽可能简洁。谢谢
<DataGrid>
    <DataGrid.Columns>
        <DataGridTemplateColumn/>
        <DataGridCheckBoxColumn/>
        <DataGridComboBoxColumn/>
        <DataGridHyperlinkColumn/>
        <DataGridTextColumn/>
    </DataGrid.Columns>
</DataGrid>
<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <!--Content-->
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <!--Content-->
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>