ToolTip无法模板绑定回datagridcell中的内容

时间:2011-05-30 09:24:30

标签: silverlight xaml

我有一个数据网格控件,其中一些列包含溢出相应容器的文本。

为了解决这个问题,我将工具提示添加到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控件模板的同时完成。有人对此有什么想法吗?

1 个答案:

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