DataGrid模板列上的文本修剪

时间:2014-07-01 11:27:32

标签: c# wpf datagrid hyperlink

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

<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>

超链接完美地工作(也有我的风格),但文本修剪不起作用。如何更改代码以使其正常工作?

附上两种风格:

<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>

谢谢!

2 个答案:

答案 0 :(得分:1)

你没有任何限制TextBlock.Width的内容,因此其中的文字永远不会被包裹或修剪。要解决此问题,您只需要对其设置某种Width限制......您可以尝试这样的事情:

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

答案 1 :(得分:1)

好吧,为了让WPF引擎了解需要修剪它应该看到控件无法放入可用空间。如果可以调整控件的大小(AutoSize),它只会增加其尺寸而不进行任何修剪。

来自MSDN

  

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

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

因此,尝试在Column或TextBlock上设置宽度限制。或者以其他方式限制调整大小。

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