我可以在不使用代码的情况下向所有DataGrids添加特定列吗?

时间:2014-10-31 19:26:47

标签: c# wpf xaml wpfdatagrid

我知道我可以在XAML中执行此操作,以将列添加到特定的DataGrid。

<DataGrid x:Name="grid">
    <DataGrid.Columns>
        <DataGridTextColumn></DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

我也知道我可以在代码中做同样的事情。

DataGridColumn dwa = new DataGridCheckBoxColumn ();
grid.Columns.Add (dwa);

但是可以使用XAML执行此操作并将其应用于所有DataGrids吗?我可以使用ResourceDictionary来应用样式,但我不知道这一点。

1 个答案:

答案 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的功能。