I want to display tooltip of different view depending on content of DataGridCell
. The following code works.
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="1" Binding="{Binding}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip>
<ToolTip.Content>
<TextBlock Foreground="Blue" Text="{Binding}"></TextBlock>
</ToolTip.Content>
</ToolTip>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.Items>
<system:String>AAA</system:String>
<system:Int32>2</system:Int32>
</DataGrid.Items>
</DataGrid>
But when I try using templates I have no success (I want select template basing on type of view model).
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="1" Binding="{Binding}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip>
<ToolTip.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate DataType="system:String">
<TextBlock Foreground="Blue" Text="{Binding}"></TextBlock>
</DataTemplate>
<DataTemplate DataType="system:Int32">
<TextBlock Foreground="Red" Text="{Binding}"></TextBlock>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</ToolTip.ContentTemplate>
</ToolTip>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.Items>
<system:String>AAA</system:String>
<system:Int32>2</system:Int32>
</DataGrid.Items>
</DataGrid>
How to fix it?
Bind the Content
property of the Tooltip
itself to the DataContext
and use explicit type specifications using {x:Type}
:
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="1" Binding="{Binding}">
<DataGridTextColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip Content="{Binding}">
<ToolTip.ContentTemplate>
<DataTemplate>
<ContentControl Content="{Binding}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type system:String}">
<TextBlock Foreground="Blue" Text="{Binding}"></TextBlock>
</DataTemplate>
<DataTemplate DataType="{x:Type system:Int32}">
<TextBlock Foreground="Red" Text="{Binding}"></TextBlock>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
</DataTemplate>
</ToolTip.ContentTemplate>
</ToolTip>
</Setter.Value>
</Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
<DataGrid.Items>
<system:String>AAA</system:String>
<system:Int32>2</system:Int32>
</DataGrid.Items>
</DataGrid>