我正在尝试使用this answer中所示的相同技术,在选择WPF DataGrid行时将TextBlock的TextWrapping
属性设置为Wrap
。
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="LightBlue" />
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
背景颜色变化很好,但是包装属性似乎没有设置。
我也尝试过创建TextBlock
样式,但是在访问IsSelected
属性时还有其他问题。我感觉到我应该在这里进行一些小的更改。
编辑:尽管我一直在寻找一个更全局的选项,尤其是当列可能自动生成时,我似乎还是可以沿用每个DataGridTextColumn
的样式。
答案 0 :(得分:2)
我也尝试过创建
TextBlock
样式,但是在访问IsSelected属性时遇到了其他问题。
此ElementStyle
应该有效:
<DataGridTextColumn Binding="{Binding Name}" Width="100">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridCell}}" Value="True">
<Setter Property="TextWrapping" Value="Wrap" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
如果要自动生成列,则可以将ElementStyle
定义为资源并处理AutoGeneratingColumn
事件:
private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
DataGrid dataGrid = (DataGrid)sender;
DataGridTextColumn column = e.Column as DataGridTextColumn;
if (column != null)
{
column.ElementStyle = dataGrid.Resources["ElementStyle"] as Style;
}
}
XAML:
<DataGrid x:Name="dataGrid" AutoGeneratingColumn="dataGrid_AutoGeneratingColumn">
<DataGrid.Resources>
<Style x:Key="ElementStyle" TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridCell}}" Value="True">
<Setter Property="TextWrapping" Value="Wrap" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
</DataGrid>