3

我的 WPF 的一列中有图像DataGrid。我需要为它们生成动态工具提示,因此我为ToolTipOpening事件创建了一个处理程序。但问题是这个事件的发送者是 Image 类的实例,它没有关于事件发生的行的任何信息,而我需要它来生成工具提示。我CellContentTemplate为此列定义了这样

<DataTemplate x:Key="SomeTemplate" x:Shared="true">
    <Image Name="SomeImage"
           Style="{StaticResource SomeStyle}"
           Width="16"
           Height="16"
           HorizontalAlignment="Center"
           VerticalAlignment="Center"
           Stretch="None"
           ToolTipOpening="SomeTooltipHandler"/>
</DataTemplate>

任何想法如何在我的处理程序中获取行号?

4

1 回答 1

1

由于 Image 是一个 DependencyObject,您可以使用VisualTreeHelper.GetParent. 因此,以查找 DataGrid 为例:

public static DataGrid FindDataGridAncestor(DependencyObject dependencyObject)
{
        DependencyObject target = dependencyObject;
        do
        {
            target = VisualTreeHelper.GetParent(target);
        }
        while (target != null && !(target is DataGrid));

        return target as DataGrid;
}

用法:

DataGrid myGrid = FindDataGridAncestor(myImage);
于 2012-12-11T11:26:14.010 回答