0

我有 wpf 数据网格,当它不适合列大小时,我想在其中修剪文本:

修剪文本:列文件

这适用于只读列。此外,我想在鼠标悬停时将完整的文本显示为工具提示。这目前无法正常工作:

它只显示 System.Windows.Controls.Textblock 而不是文本

此外,这使我的所有列都是只读的,但其中一个列应该是可编辑的。以下代码用于修剪文本并显示工具提示:

            <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridCell}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type DataGridCell}">
                            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" TextTrimming="CharacterEllipsis">
                                <TextBlock.ToolTip>
                                    <ToolTip Visibility="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget, Converter={StaticResource TrimToVisConverter}}">
                                        <ToolTip.Content>
                                            <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}" />
                                        </ToolTip.Content>
                                    </ToolTip>
                                </TextBlock.ToolTip>
                            </TextBlock>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

TrimmedTextBlockVisibilityConverter:

  public class TrimmedTextBlockVisibilityConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null) return Visibility.Collapsed;

        FrameworkElement textBlock = (FrameworkElement)value;

        textBlock.Measure(new System.Windows.Size(Double.PositiveInfinity, Double.PositiveInfinity));

        if (((FrameworkElement)value).ActualWidth < ((FrameworkElement)value).DesiredSize.Width)
            return Visibility.Visible;
        else
            return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
4

0 回答 0