我得到 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>
我想为通过附加 属性 获取工具提示文本的数据网格列定义样式。但是我得到的是文本 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>