2012-12-11 49 views
3

我在我的WPF DataGrid的其中一列中有圖片。我需要爲它們生成動態工具提示,所以我爲ToolTipOpening事件創建了一個處理程序。但問題是,這個事件的發件人是Image類的實例,並且它沒有關於發生事件的行的任何信息,而我需要它來生成工具提示。 我已經CellContentTemplate爲此列定義這樣如何獲取DataGrid中的圖像行?

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

任何想法如何得到我的處理程序行號?

回答

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); 
+0

謝謝,這對我的工作! – KirillSk