首页 > 解决方案 > 当 IsSelected 时 WPF DataGrid 设置文本换行

问题描述

我正在尝试使用此答案TextWrapping中显示的相同技术将 WPF DataGrid 行 TextBlock 的属性设置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属性时遇到了其他问题。我觉得我应该在这里做一个小的改变。

编辑:看起来我也可以沿着样式路线走 each DataGridTextColumn,尽管我一直在寻找一个更全局的选项,尤其是当列可能会自动生成时。

标签: c#wpf

解决方案


我也尝试过创建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>

推荐阅读