我有一个数据网格控件,其中一些列包含溢出相应容器的文本。
为了解决这个问题,我将工具提示添加到datagridcell的controltemplate中,然后 通过模板绑定到Content属性将工具提示的内容绑定到数据内容。
概述的Xaml代码如下所示:
<Style x:Key="RotatedCell" TargetType="sdk:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridCell">
<ContentPresenter
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" >
<ToolTipService.ToolTip>
<ToolTip Content="{TemplateBinding Content}"/>
</ToolTipService.ToolTip>
</ContentPresenter>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
数据网格可以显示成功显示数据,但光标悬停时
报告列错误:
*
Microsoft JScript运行时错误:Silverlight应用程序中的未处理错误[行:0位置:0]
在MS.Internal.XcpImports.MethodEx(IntPtr ptr,String name,CValue [] cvData)
在MS.Internal.XcpImports.MethodEx(DependencyObject obj,String name)
在MS.Internal.XcpImports.FrameworkElement_ApplyTemplate(FrameworkElement frameworkElement)
在System.Windows.Controls.Control.ApplyTemplate()
在System.Windows.Controls.ToolTip.OpenPopup()
在System.Windows.Controls.ToolTip.OnIsOpenChanged(Boolean isOpen)
在System.Windows.Controls.ToolTip.OnIsOpenPropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
在System.Windows.DependencyObject.RaisePropertyChangeNotifications(DependencyProperty dp,Object oldValue,Object newValue)
在System.Windows.DependencyObject.UpdateEffectiveValue(DependencyProperty属性,EffectiveValueEntry oldEntry,EffectiveValueEntry&amp; newEntry,ValueOperation操作)
在System.Windows.DependencyObject.SetValueInternal(DependencyProperty dp,Object value,Boolean allowReadOnlySet)
在System.Windows.DependencyObject.SetValue(DependencyProperty属性,布尔b)
在System.Windows.Controls.ToolTipService.OpenAutomaticToolTip(Object sender,EventArgs e)
在MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex,Delegate handlerDelegate,Object sender,Object args)
在MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj,IntPtr unmanagedObjArgs,Int32 argsTypeIndex,Int32 actualArgsTypeIndex,String eventName)
这个现象让我感到困惑,因为我认为xaml语法似乎是正确的,并且在构建和加载过程中没有报告错误。看起来工具提示控件试图在即将出现时应用模板,但我认为应该在应用datagridcell控件模板的同时完成。有人对此有什么想法吗?
答案 0 :(得分:0)
试试这个:
<Setter Property="ToolTip" Value={Binding Content} />
更新:是的,我忘了你问过Silverlight而不是WPF。这样做很好,我查了一下:
<Style x:Key="DataGridCellStyle"
TargetType="sdk:DataGridCell">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="sdk:DataGridCell">
<Grid x:Name="Root"
Background="{TemplateBinding Background}">
<ToolTipService.ToolTip>
<ContentControl Content="{TemplateBinding Content}" />
</ToolTipService.ToolTip>
<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>