我得到 System.Windows.Style 作为 DataGrid 中 header 的工具提示的文本

I get System.Windows.Style as text of the ToolTip of the header in a DataGrid

我想为通过附加 属性 获取工具提示文本的数据网格列定义样式。但是我得到的是文本 System.Windows.Style 而不是文本。

代码是这样的。 XML 定义样式的资源文件:

<Style TargetType="{x:Type DataGridColumnHeader}" x:Key="DataGridColumnHeaderConTooltip">
    <Setter Property="ToolTip">
        <Setter.Value>
            <Style TargetType="ToolTip">
                <Setter Property="ToolTipService.ShowOnDisabled" Value="true"/>
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <StackPanel>
                                <!--Para poder utilizar el attached propery, se tiene que utilizar PlacementTarget, y además indicar que el source
                                es el control padre, que es el tooltip, porque el TextBlck no pertenece al mismo visual tree.-->
                                <TextBlock Text="{Binding PlacementTarget.(ap:CabeceraDatagridAttachedProperty.Tooltip), RelativeSource={RelativeSource AncestorType=ToolTip}}"  MaxWidth="400" TextWrapping='Wrap' />
                            </StackPanel>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
</Style>

xaml中的代码:

            <DataGridTextColumn Header="Cantidad Para Descontar" Binding="{Binding CantidadParaDescontar, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, ValidatesOnDataErrors=True}" Width="AUTO" IsReadOnly="false"
                                ap:CabeceraDatagridAttachedProperty.Tooltip="tooltip cabecera por attached property"
                                HeaderStyle="{StaticResource DataGridColumnHeaderConTooltip}">

附件属性:

namespace GTS.CMMS.Client.AttachedProperties
{
    public static class CabeceraDatagridAttachedProperty
    {
        public static readonly DependencyProperty TooltipProperty =
            DependencyProperty.RegisterAttached(
            "Tooltip",
            typeof(string),
            typeof(CabeceraDatagridAttachedProperty));

        public static string GetTooltip(DependencyObject obj)
        {
            return (string)obj.GetValue(TooltipProperty);
        }

        public static void SetTooltip(DependencyObject obj, string value)
        {
            obj.SetValue(TooltipProperty, value);
        }
    }
}

I get the text System.Windows.Style instead of the text.

这是预料之中的,因为您为 ToolTip 属性 而不是内容指定了样式。 ToolTip 不知道如何显示 Style,所以它调用 ToString().

您应该做的是将所需的附加 属性 直接绑定到 ToolTip 属性。使用 Self 作为 RelativeSource 来引用基础 DataGridColumnHeader。然后导航至其 Column 属性 并指定您附加的 属性.

<Style TargetType="{x:Type DataGridColumnHeader}" x:Key="DataGridColumnHeaderConTooltip">
   <Setter Property="ToolTipService.ShowOnDisabled" Value="True"/>
   <Setter Property="ToolTip" Value="{Binding Column.(local:CabeceraDatagridAttachedProperty.Tooltip), RelativeSource={RelativeSource Self}}"/>
</Style>