它是一種常見的誤解DataGridColumn
是一個依賴對象,是視覺樹的一部分。不是這樣。所以,即使我們創建了一個可繼承依賴屬性(就像DataContext
或FlowDirection
自動視覺父傳播到其子元素)的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>
**編輯**在提示增加了正確的RelativeSource。 – 2012-03-07 06:37:48
由於DataGridCell在可視樹而不是DataGridColumn中,並且由於GenerateElement方法傳遞了對單元對象的引用,因此我可以將我的ToolTipTemplate粘貼到單元的ToolTipTemplate(假設它具有該屬性)後面的代碼中? – 2012-03-07 13:38:46
我試過這個,但我的模板沒有被用來生成工具提示。我的類從DataGridColumn下降,而不是DataGridCell。我應該在ContentControl的RelativeSource子句中將DataGridCell更改爲DataGridColumn(或我的自定義類)? – 2012-03-09 04:11:30