1

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?

mm8
  • 163,881
  • 10
  • 57
  • 88
Boris Nikitin
  • 369
  • 4
  • 12
  • https://stackoverflow.com/questions/3365909/setting-tooltip-to-equal-content – Anton Jun 06 '17 at 06:08
  • Anton, provided link is about same text in tooltip and cell. But I have problem with selection of template for tooltip. Maybe you can point me to specific answer in the thread that related to my question? – Boris Nikitin Jun 06 '17 at 08:49

1 Answers1

1

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>
mm8
  • 163,881
  • 10
  • 57
  • 88