我有一个相当复杂的应用程序,所以我使用ResourceDictionary来管理我的所有样式,等等。在这里,我为DataGridColumnHeaderBaseStyle定义了一种样式:
<Style x:Key="DataGridColumnHeaderBaseStyle" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="{StaticResource TableHeaderBackgroundColor}" />
<Setter Property="BorderBrush" Value="{StaticResource GridLinesColor}" />
<Setter Property="BorderThickness" Value="0,0,1,1" />
<Setter Property="Padding" Value="{DynamicResource HeaderPadding}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ContentPresenter Grid.Column="0" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
<Path x:Name="SortArrow" Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center" Width="8" Height="6"
Margin="3,0,0,0" Stretch="Fill" Opacity="0.5" Fill="White" RenderTransformOrigin="0.5,0.4" Visibility="Collapsed"
Data="M0,0 L1,0 0.5,1 z" />
</Grid>
</Themes:DataGridHeaderBorder>
<Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/>
<Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="SortDirection" Value="Ascending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
<Setter TargetName="SortArrow" Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="180" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="SortDirection" Value="Descending">
<Setter TargetName="SortArrow" Property="Visibility" Value="Visible" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledTableHeaderBackgroundColor}" />
<Setter Property="BorderBrush" Value="{StaticResource DisabledGridLinesColor}" />
</Trigger>
</Style.Triggers>
</Style>到目前一切尚好。在我的主应用程序中,我有一个加载这种样式的DataGrid。问题是,当我为工具提示添加一个Setter时,我会丢失该列的样式模板。
<DataGrid.Columns>
<DataGridTextColumn Header="#" Binding="{Binding Number}" IsReadOnly="True" />
<DataGridComboBoxColumn Header="Region" ItemsSource="{Binding Kiln.Regions, Source={StaticResource MainViewModel}}"
SelectedValueBinding="{Binding RegionNumber}" SelectedValuePath="Number" DisplayMemberPath="Name"
EditingElementStyle="{StaticResource EditingComboBoxStyle}" />
<DataGridCheckBoxColumn Header="Has Mixture" Binding="{Binding HasMixture}" />
<DataGridCheckBoxColumn Header="Has Burners" Binding="{Binding HasBurners}" />
<DataGridTextColumn Header="Burners/Circuits" Binding="{Binding CircuitBurnersNumber}" />
<DataGridTextColumn Header="GP ⌀" Binding="{Binding GasPipeDiameter}" >
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="ToolTip" Value="Gas Pipe ⌀ (mm)" />
</Style>
</DataGridTextColumn.HeaderStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Gas Orifice ⌀ (mm)" Binding="{Binding GasOrificeDiameter}" />
<DataGridTextColumn Header="Air Pipe ⌀ (mm)" Binding="{Binding AirPipeDiameter}" />
<DataGridTextColumn Header="Air Orifice ⌀ (mm)" Binding="{Binding AirOrificeDiameter}" />
</DataGrid.Columns>添加时会忽略样式的其余部分。我遗漏了什么吗?有什么线索可以解决吗?

在这里你可以看到我所说的行为。提前谢谢。
发布于 2018-03-09 14:47:53
新样式应从基样式派生,使用BasedOn属性:
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader"
BasedOn="{StaticResource DataGridColumnHeaderBaseStyle}">
<Setter Property="ToolTip" Value="Gas Pipe ⌀ (mm)" />
</Style>
</DataGridTextColumn.HeaderStyle>这样,新样式可以添加更多的setter或覆盖基样式中的一些setter。
https://stackoverflow.com/questions/49196192
复制相似问题