数据网格模板列上的文本修剪

本文关键字:文本 修剪 数据网 网格 数据 | 更新日期: 2023-09-27 18:11:09

我的数据网格中有以下列:

<DataGridTemplateColumn  CanUserReorder="False" CanUserResize="True" Header="">
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate />
                    </DataGridTemplateColumn.CellEditingTemplate>
                    <DataGridTemplateColumn.CellStyle>
                        <Style TargetType="DataGridCell" BasedOn="{StaticResource DatagridCellHyperlinkStyle}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Border Padding="{TemplateBinding Padding}"  VerticalAlignment="Center">
                                            <TextBlock Width="Auto" Height="Auto" TextTrimming="CharacterEllipsis">
                                        <Hyperlink>
                                         <InlineUIContainer TextDecorations="{Binding Path=TextDecorations, RelativeSource={RelativeSource AncestorType=TextBlock}}" Foreground="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType=TextBlock}}">
                                          <ContentPresenter Width="Auto" Height="Auto" Content="{Binding DataContext.Value, RelativeSource={RelativeSource AncestorType=DataGridRow}}"/>
                                         </InlineUIContainer>
                                            <Hyperlink.Style>
                                                <Style TargetType="Hyperlink" BasedOn="{StaticResource HyperlinkStyle}">
                                                                <EventSetter Event="Hyperlink.Click" Handler="Click" />
                                                    </Style>
                                            </Hyperlink.Style>
                                        </Hyperlink>
                                            </TextBlock>
                                        </Border>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTemplateColumn.CellStyle>
                </DataGridTemplateColumn>

超链接工作完美(与我的风格也是),但文本修剪不起作用。我怎样才能改变我的代码使它工作?

附加的2个样式:

<Style x:Key="DatagridCellHyperlinkStyle" TargetType="{x:Type DataGridCell}">
    <Setter Property="Padding" Value="5" />
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="FontSize" Value="14" />
    <Setter Property="FontFamily" Value="Helvetica" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Foreground" Value="{StaticResource CouleurBouton}"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="{StaticResource ResourceKey=CouleurBouton}"/>
            <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurFond}" />
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{StaticResource ResourceKey=CouleurBouton}"/>
            <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurFond}" />
        </Trigger>
        <DataTrigger Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Value="True">
            <Setter Property="Background" Value="{StaticResource ResourceKey=CouleurBoutonHover}"/>
            <Setter Property="Foreground" Value="{StaticResource ResourceKey=CouleurTexteBoutonHover}" />
        </DataTrigger>
    </Style.Triggers>
</Style>
<Style x:Key="HyperlinkStyle" TargetType="{x:Type Hyperlink}">
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Foreground" Value="{DynamicResource CouleurBoutonPressed}" />
        </Trigger>
    </Style.Triggers>
    <Setter Property="Foreground" Value="{DynamicResource CouleurBouton}" />
    <Setter Property="TextBlock.TextDecorations" Value="{x:Null}" />
</Style>

数据网格模板列上的文本修剪

您没有任何东西可以限制TextBlock.Width,因此其中的文本将永远不会换行或被修剪。为了解决这个问题,你只需要在它上面设置一些Width限制…您可以尝试这样做:

<ControlTemplate>
    <Border Padding="{TemplateBinding Padding}"  VerticalAlignment="Center">
        <TextBlock MaxWidth="250" TextTrimming="CharacterEllipsis">
            ...

对于WPF引擎来说,要理解修剪是必要的,它应该看到控件不能放到可用的空间中。如果控件可以调整大小(AutoSize),它只会增加其尺寸而不做任何修剪。

从MSDN:

获取或设置当内容时要使用的文本修剪行为。溢出内容区

我在你的模板中看不到任何提示将遇到空间限制的内容。

所以尝试设置宽度限制,无论是在列上,或在TextBlock上。或者用其他方式限制大小

<TextBlock Width="Auto" Height="Auto" 
           MaxWidth="100"
           MinWidth="30"
           TextTrimming="CharacterEllipsis">