Martin Klopp Jensen
Martin Klopp Jensen

Reputation: 3

ToolTipService.ToolTip not working on DataGridCell in UWP XAML

i'm trying to display a tooltip over a cell in a Windows Toolkit DataGrid in UWP XAML. I'm able to show a static value by doing this:

<wct:DataGridTextColumn Width="200" Binding="{Binding ChargeInformationDto.Description, Mode=OneWay}" Header="Navn" Tag="Description">
    <wct:DataGridTextColumn.CellStyle>
        <Style TargetType="wct:DataGridCell">
            <Setter Property="ToolTipService.ToolTip" Value="Tooltip text to show" />
        </Style>
    </wct:DataGridTextColumn.CellStyle>
</wct:DataGridTextColumn>

But with Bindings it does not show:

<wct:DataGridTextColumn Width="200" Binding="{Binding ChargeInformationDto.Description, Mode=OneWay}" Header="Navn" Tag="Description">
    <wct:DataGridTextColumn.CellStyle>
        <Style TargetType="wct:DataGridCell">
            <Setter Property="ToolTipService.ToolTip" Value="{Binding ChargeInformationDto.Description, Mode=OneWay}" />
        </Style>
    </wct:DataGridTextColumn.CellStyle>
</wct:DataGridTextColumn>

Anyone managed to make this work?

Upvotes: 0

Views: 980

Answers (1)

Anran Zhang
Anran Zhang

Reputation: 7727

In UWP XAML, you cannot use binding in Style. For specific instructions, please refer to this document:

Windows Presentation Foundation (WPF) and Microsoft Silverlight supported the ability to use a Binding expression to supply the Value for a Setter in a Style. The Windows Runtime doesn't support a Binding usage for Setter.Value (the Binding won't evaluate and the Setter has no effect, you won't get errors, but you won't get the desired result either).

As you can see in the source code of DataGridTextColumn, DataGridTextColumn will dynamically create a TextBlock and TextBox to display and edit content, so using TooltipService directly in the XAML to set Tooltip will not be attached to the newly created TextBlock, which is the reason of Tooltip cannot be displayed.

If you want to display Tooltip, then you can consider creating a DataGridTemplateColumn:

<controls:DataGridTemplateColumn  Width="200"
                                  Header="Navn" Tag="Description">
    <controls:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding ChargeInformationDto.Description, Mode=OneWay}" FontSize="20"
                       ToolTipService.ToolTip="{Binding ChargeInformationDto.Description, Mode=OneWay}"/>
        </DataTemplate>
    </controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>

Upvotes: 2

Related Questions