Wpf 网格排序时工具提示绑定混乱

Wpf 网格排序时工具提示绑定混乱,wpf,data-binding,binding,tooltip,telerik-grid,Wpf,Data Binding,Binding,Tooltip,Telerik Grid,我将telerik网格控件绑定到ViewModel。其中一个属性可以包含相对较长的字符串,很难放入网格。因此,我使用TextTrimp=“WordEllipsis”将单元格显示为TextBlock,并在工具提示控件中显示全文: <telerik:GridViewDataColumn UniqueName="TaskDetails" DataMemberBinding="{Binding TaskDetails}" Header="Task details" IsReadOnly="Tru

我将telerik网格控件绑定到ViewModel。其中一个属性可以包含相对较长的字符串,很难放入网格。因此,我使用TextTrimp=“WordEllipsis”将单元格显示为TextBlock,并在工具提示控件中显示全文:

<telerik:GridViewDataColumn UniqueName="TaskDetails" DataMemberBinding="{Binding TaskDetails}" Header="Task details"  IsReadOnly="True" Width="*" >
    <telerik:GridViewDataColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding TaskDetails}" ToolTipService.ShowDuration="300000" TextTrimming="WordEllipsis" Height="30">
                <TextBlock.ToolTip>
                    <ToolTip>
                        <TextBlock Width="350" TextWrapping="WrapWithOverflow" Text="{Binding TaskDetails}" />
                    </ToolTip>
                </TextBlock.ToolTip>
            </TextBlock>
        </DataTemplate>
    </telerik:GridViewDataColumn.CellTemplate>
</telerik:GridViewDataColumn>

在用户对网格进行排序之前,一切正常。如果应用了排序,TextBlock将显示正确的数据,但工具提示将显示以前位于该位置的单元格的文本。好像它没有被分类


知道如何解决这个问题吗?

我们遇到了类似的问题,尽管网格不同。 datatemplate包含一个用户控件,其中包含以下内容:

public WebSnapshotCell()
{
  InitializeComponent();

  this.ToolTipOpening += new ToolTipEventHandler(WebSnapshotCell_ToolTipOpening);
}

void WebSnapshotCell_ToolTipOpening(object sender, ToolTipEventArgs e)
{
  // Refresh tooltip's data context
  ToolTip tooltip = this.ToolTip as ToolTip;
  if (tooltip != null)
  {
    tooltip.DataContext = this.DataContext;
  }
}

在您的情况下,您可以尝试将TextBox置于UserControl中,或者以另一种方式处理ToolTipOpening事件,或者显式地将工具提示的DataContext绑定到TextBlock的DataContext中。我在网格中使用了自定义控件:

<telerik:GridViewDataColumn UniqueName="TaskDetails" 
                        DataMemberBinding="{Binding TaskDetails}" 
                        Header="Task details"  
                        Width="500"
                        IsReadOnly="True">
<telerik:GridViewDataColumn.CellTemplate>
    <DataTemplate>
        <cc:LongTextBlock Text="{Binding TaskDetails}" ToolTipShowDuration="300000" VerticalAlignment="Center" ToolTipWidth="350" />
    </DataTemplate>
</telerik:GridViewDataColumn.CellTemplate>
以及控件的样式:

<Style TargetType="{x:Type local:LongTextBlock}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:LongTextBlock}">
                <TextBlock Text="{TemplateBinding Text}" TextTrimming="WordEllipsis" ToolTipService.ShowDuration="{TemplateBinding ToolTipShowDuration}">
                    <TextBlock.ToolTip>
                        <ToolTip>
                            <TextBlock Width="{TemplateBinding ToolTipWidth}" TextWrapping="WrapWithOverflow" Text="{TemplateBinding Text}" />
                        </ToolTip>
                    </TextBlock.ToolTip>
                </TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>

<Style TargetType="{x:Type local:LongTextBlock}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:LongTextBlock}">
                <TextBlock Text="{TemplateBinding Text}" TextTrimming="WordEllipsis" ToolTipService.ShowDuration="{TemplateBinding ToolTipShowDuration}">
                    <TextBlock.ToolTip>
                        <ToolTip>
                            <TextBlock Width="{TemplateBinding ToolTipWidth}" TextWrapping="WrapWithOverflow" Text="{TemplateBinding Text}" />
                        </ToolTip>
                    </TextBlock.ToolTip>
                </TextBlock>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

</Style>