我知道我可以在XAML中执行此操作,以将列添加到特定的DataGrid。
<DataGrid x:Name="grid">
<DataGrid.Columns>
<DataGridTextColumn></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
我也知道我可以在代码中做同样的事情。
DataGridColumn dwa = new DataGridCheckBoxColumn ();
grid.Columns.Add (dwa);
但是可以使用XAML执行此操作并将其应用于所有DataGrids吗?我可以使用ResourceDictionary来应用样式,但我不知道这一点。
答案 0 :(得分:0)
因为Columns
属性是只读的。所以使用Style不能设置它(通过Setter)以及以某种方式添加DataGridColumn
。那意味着你会被困住。但是有一种解决方法,而不是在窗口中使用多个DataGrids,您可以只使用多个控件,然后添加一些样式定位控件类型并将Template
设置为DataGrid
。这是一个简单的例子:
<Grid>
<Grid.Resources>
<Style TargetType="Control">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="Name"></DataGridTextColumn>
<DataGridTextColumn Header="City"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<!-- use 3 controls instead of 3 DataGrids -->
<Control></Control>
<Control Grid.Row="1"></Control>
<Control Grid.Row="2"></Control>
</Grid>
我的建议是尝试构建一些视图模型,然后你只需要分配ItemsSource
(可以通过样式设置器设置),当然我们必须使用默认的AutoGenerateColumns
DataGrid的功能。