我目前有一大块XAML,我正在努力重构。
<DataGrid x:Name="CurrentConfigDataGrid" ItemsSource="{Binding}" >
<DataGrid.Resources>
<ResourceDictionary Source="../ResourceDictionaries/MergedDictionary.xaml" />
</DataGrid.Resources>
<DataGrid.ItemContainerStyle>
<Style TargetType="{x:Type DataGridRow}" BasedOn="{StaticResource {x:Type DataGridRow}}" />
</DataGrid.ItemContainerStyle>
<DataGrid.Columns>
<DataGridCheckBoxColumn Width="25">
</DataGridCheckBoxColumn>
<DataGridTemplateColumn Width="80" CanUserResize="False" CanUserSort="False" >
<DataGridTemplateColumn.Header>
<Label Content="Type" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" />
</DataTemplate.Resources>
<TextBlock Text="{Binding Type}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="150" CanUserResize="False" CanUserSort="False" >
<DataGridTemplateColumn.Header>
<Label Content="Version / Date" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" />
</DataTemplate.Resources>
<TextBlock Text="{Binding Version}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="150" CanUserResize="False" CanUserSort="False" >
<DataGridTemplateColumn.Header>
<Label Content="GUID" />
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" />
</DataTemplate.Resources>
<TextBlock Text="{Binding GUID}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
如何取出标准的“TextBlock”样式,以便自动拾取?我在开始时引用了我的MergedDictionary,但这并不会自动将DataGrid中的样式转换为textBlock的样式,除非我手动指定它们......这意味着我需要一个DataGirdTemplateColumn,然后是一个模板等。
最好如何重构?
答案 0 :(得分:2)
这是否有效??
<DataGrid x:Name="CurrentConfigDataGrid" ItemsSource="{Binding}" >
<DataGrid.Resources>
<ResourceDictionary Source="../ResourceDictionaries/MergedDictionary.xaml" />
<Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" />
</DataGrid.Resources>
...
从技术上讲,如果你在资源中创建一个Style,没有Key但是有一个TargetType,它应该自动应用于那个没有明确Style样式的那个控件。
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Version}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
答案 1 :(得分:0)
你有不同的标题和单元格模板,我还有question如何进行选择性模板化。但你做错了(就我而言)是为每一列重新定义资源的风格。
为什么不简单
<DataGridTemplateColumn Header="Type">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Type}"
Style={StaticResource TextBlock} />
</DataTemplate>
</DataGridTemplateColumn>
您仍然需要合并包含TextBlock
样式的字典,最好是在最高级别(Window
或UserControl
资源上)。