带有 DataGrid 的 WPF UserControl,在 XAML 中添加额外的列
WPF UserControl with DataGrid, adding extra columns in XAML
我正在尝试尽可能多地重复使用我正在编写的 XAML。
现在,我想在 DataGrids 中显示我的对象。我的对象通过继承共享一些共同的属性。因此,我想创建一个带有网格的 UserControl,并为每个对象共有的属性定义一些列。所以看起来像这样:
<UserControl Name="MyCustomGrid">
<Grid>
<DataGrid>
<!-- Common Settings -->
...
<!-- /Common Settings -->
<DataGrid.Columns>
<ADataGridColumn Name="CommonProperty1"/>
<ADataGridColumn Name="CommonProperty2"/>
...
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
然后我希望能够使用此 UserControl 并为我要显示的对象的特定属性添加 extra 列,through XAML 像这样:
<view:myCustomGrid>
<view:myCustomGrid.Columns>
<ADataGridColumn Name="SpecificProperty1"/>
<ADataGridColumn Name="SpecificProperty2"/>
...
</view:myCustomGrid.Columns>
</view:myCustomGrid>
这可能吗?我查看了 this 问题,但似乎无法在 DataGrid.Columns
下插入 ContentControl
也许这不是要走的路...
感谢您的帮助
您可以像这样定义列;包括不同类型
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn/>
<DataGridCheckBoxColumn/>
<DataGridComboBoxColumn/>
<DataGridHyperlinkColumn/>
<DataGridTextColumn/>
</DataGrid.Columns>
</DataGrid>
当您设置 AutoGenerateColumns="True"
(默认设置)时,您也将从绑定属性中获取列。如果您只想查看指定的列,则必须设置 AutoGenerateColumns="False"
.
DataGridTemplateColumn
用于用户特定的列。所以你可以把你想要的任何东西都放进去。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!--Content-->
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<!--Content-->
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
但是为什么要将其封装在 UserControl
中而不是对 DataGrid
实例本身进行封装?我建议为每个 DataGrid
指定列,因为将其放入 UserControl
中需要大量工作。或者当每个 DataGrid
.
有一些相同的东西时使用样式
我正在尝试尽可能多地重复使用我正在编写的 XAML。
现在,我想在 DataGrids 中显示我的对象。我的对象通过继承共享一些共同的属性。因此,我想创建一个带有网格的 UserControl,并为每个对象共有的属性定义一些列。所以看起来像这样:
<UserControl Name="MyCustomGrid">
<Grid>
<DataGrid>
<!-- Common Settings -->
...
<!-- /Common Settings -->
<DataGrid.Columns>
<ADataGridColumn Name="CommonProperty1"/>
<ADataGridColumn Name="CommonProperty2"/>
...
</DataGrid.Columns>
</DataGrid>
</Grid>
</UserControl>
然后我希望能够使用此 UserControl 并为我要显示的对象的特定属性添加 extra 列,through XAML 像这样:
<view:myCustomGrid>
<view:myCustomGrid.Columns>
<ADataGridColumn Name="SpecificProperty1"/>
<ADataGridColumn Name="SpecificProperty2"/>
...
</view:myCustomGrid.Columns>
</view:myCustomGrid>
这可能吗?我查看了 this 问题,但似乎无法在 DataGrid.Columns
下插入 ContentControl也许这不是要走的路...
感谢您的帮助
您可以像这样定义列;包括不同类型
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn/>
<DataGridCheckBoxColumn/>
<DataGridComboBoxColumn/>
<DataGridHyperlinkColumn/>
<DataGridTextColumn/>
</DataGrid.Columns>
</DataGrid>
当您设置 AutoGenerateColumns="True"
(默认设置)时,您也将从绑定属性中获取列。如果您只想查看指定的列,则必须设置 AutoGenerateColumns="False"
.
DataGridTemplateColumn
用于用户特定的列。所以你可以把你想要的任何东西都放进去。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<!--Content-->
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<!--Content-->
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
但是为什么要将其封装在 UserControl
中而不是对 DataGrid
实例本身进行封装?我建议为每个 DataGrid
指定列,因为将其放入 UserControl
中需要大量工作。或者当每个 DataGrid
.