2012-03-07 28 views
0

我正在處理從DataGridColumn下降的自定義類。 DataGridColumn的基類是DependencyObject。因此,它沒有Tooltip屬性。將工具提示功能添加到不從FrameworkElement下載的wpf控件

我希望我的自定義類具有Tooltip屬性。實際上,我希望它也有一個ToolTipTemplate屬性,它是一個可用於生成工具提示的DataTemplate。我如何着手將這個功能添加到我的課堂上?

託尼

回答

1

它是一種常見的誤解DataGridColumn是一個依賴對象,是視覺樹的一部分。不是這樣。所以,即使我們創建了一個可繼承依賴屬性(就像DataContextFlowDirection自動視覺父傳播到其子元素)的ToolTip新的屬性不會下降到單個細胞,這些細胞都沒有的孩子數據網格列。

所以現在我們知道了,剩下的唯一方法就是在CellStyle中添加綁定並綁定到自己的Column.ToolTip屬性。僅僅因爲你決定使用ToolTipTemplate,那麼你可以添加一個ContentControl然後綁定到它的內容模板。

事情是這樣的......

<tk:DataGrid x:Name="MyDataGrid" RowHeaderWidth="15" 
       ItemsSource="{StaticResource MyData}" 
       AutoGenerateColumns="False"> 
     <tk:DataGrid.CellStyle> 
      <Style TargetType="{x:Type tk:DataGridCell}"> 
       <Setter Property="ToolTip"> 
        <Setter.Value> 
         <ContentControl 
          ContentTemplate="{Binding Column.ToolTipTemplate, 
           RelativeSource={RelativeSource FindAncestor, 
            AncestorType={x:Type tk:DataGridCell}}}"/> 
        </Setter.Value> 
       </Setter> 
       <Style.Triggers> 
        <DataTrigger 
          Binding="{Binding Column.ToolTipTemplate, 
           RelativeSource={RelativeSource Self}}" 
           Value="{x:Null}"> 
         <Setter Property="ToolTip" Value="{x:Null}"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </tk:DataGrid.CellStyle> 
     .... 
    </tk:DataGrid> 
+0

**編輯**在提示增加了正確的RelativeSource。 – 2012-03-07 06:37:48

+0

由於DataGridCell在可視樹而不是DataGridColumn中,並且由於GenerateElement方法傳遞了對單元對象的引用,因此我可以將我的ToolTipTemplate粘貼到單元的ToolTipTemplate(假設它具有該屬性)後面的代碼中? – 2012-03-07 13:38:46

+0

我試過這個,但我的模板沒有被用來生成工具提示。我的類從DataGridColumn下降,而不是DataGridCell。我應該在ContentControl的RelativeSource子句中將DataGridCell更改爲DataGridColumn(或我的自定義類)? – 2012-03-09 04:11:30

相關問題