【问题标题】:dynamically generate tool-tip on hover on any cell of a grid in WPF在 WPF 中的任何网格单元格上悬停时动态生成工具提示
【发布时间】:2018-05-10 18:44:27
【问题描述】:

我根本没有在 Silverlight 上工作过,并且一直陷入对在 Silverlight 上运行的某些应用程序的要求之一。

要求: 我想在我的网格上显示工具提示,它在列下方并且悬停在 ID 列上,我想根据该行的 ID 分别显示每一行的工具提示。

This is how Grid Looks:

我有下面的数据网格代码:

<UserControl xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" 
    x:Class="MYAPP.View.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
    xmlns:src="clr-namespace:MYAPP.View"
    xmlns:pag="clr-namespace:MYAPP.View.Pages"
    xmlns:ctl="clr-namespace:MYAPP.Controls;assembly=MYAPP.Controls"
    xmlns:log="clr-namespace:MYAPP.Logic.WCF.Services;assembly=MYAPP.Logic"
    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    >
    <Grid Name="grdMain">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <ctl:FieldHelp x:Name="grdMyGrid" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="40,10"
                       ItemsSource="{Binding PendingRequests, Mode=TwoWay}"
                       DoubleClick="grdMyGrid_DoubleClick"
                       CurrentCellChanged="grdChildren_CurrentCellChanged"
                       Visibility="{Binding PendingRequestsDetail, ConverterParameter=false, Converter={StaticResource VisibilityConverter}}"
                       AutoGenerateColumns="False">
            <ctl:FieldHelp.Columns>
                <data:DataGridTextColumn Binding="{Binding ID, Mode=TwoWay}"  IsReadOnly="True"/>
                <data:DataGridTextColumn Binding="{Binding Name, Mode=TwoWay}" IsReadOnly="True"/>
                <data:DataGridTextColumn Binding="{Binding Description, Mode=TwoWay}" IsReadOnly="True"/>
                <data:DataGridTextColumn Binding="{Binding Date, Mode=TwoWay, Converter={StaticResource ShortDateStringConverter}}" IsReadOnly="True"/>
                <data:DataGridCheckBoxColumn Binding="{Binding Process, Mode=TwoWay}"  IsReadOnly="False" IsThreeState="False"/>
            </ctl:FieldHelp.Columns>
        </ctl:FieldHelp>
    </Grid>
</UserControl>

我不知道如何满足要求。” 在网上搜索并没有给我正确的解决方案,我最终在工具提示中得到与行单元格相同的 NameOnly Get Name in tool-tip

    <ctl:FieldHelp x:Name="grdMyGrid" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Margin="40,10"
                       ItemsSource="{Binding PendingRequests, Mode=TwoWay}"
                       DoubleClick="grdMyGrid_DoubleClick"
                       CurrentCellChanged="grdChildren_CurrentCellChanged"
                       Visibility="{Binding PendingRequestsDetail, ConverterParameter=false, Converter={StaticResource VisibilityConverter}}"
                       AutoGenerateColumns="False">
            <ctl:FieldHelp.Columns>

                <data:DataGridTextColumn Binding="{Binding ID, Mode=TwoWay}"  IsReadOnly="True"  >
                   <data:DataGridTextColumn.CellStyle>
                        <Style TargetType="data:DataGridCell" >
                            <Setter Property="ToolTipService.ToolTip" Value="{Binding Name}"  />
                            </Setter>
                        </Style>
                    </data:DataGridTextColumn.CellStyle>
                </data:DataGridTextColumn>
                <data:DataGridTextColumn Binding="{Binding Name, Mode=TwoWay}" IsReadOnly="True"/>
                    <data:DataGridTextColumn Binding="{Binding RelativeName, Mode=TwoWay}" IsReadOnly="True"/>
                    <data:DataGridTextColumn Binding="{Binding ID, Mode=TwoWay}"  IsReadOnly="True"/>
                <data:DataGridTextColumn Binding="{Binding Name, Mode=TwoWay}" IsReadOnly="True"/>
                <data:DataGridTextColumn Binding="{Binding Description, Mode=TwoWay}" IsReadOnly="True"/>
                <data:DataGridTextColumn Binding="{Binding Date, Mode=TwoWay, Converter={StaticResource ShortDateStringConverter}}" IsReadOnly="True"/>
                <data:DataGridCheckBoxColumn Binding="{Binding Process, Mode=TwoWay}"  IsReadOnly="False" IsThreeState="False"/>
            </ctl:FieldHelp.Columns>
        </ctl:FieldHelp>
    </Grid>
</UserControl>

但我想动态绑定根据我悬停的记录 ID 显示数据的工具提示。

Tool-tip should be seen like this

【问题讨论】:

    标签: wpf silverlight tooltip


    【解决方案1】:

    我会添加一个样式来设置您的工具提示

    <ctl:FieldHelp...>
      <ctl:FieldHelp.Resources>
        <Style TargetType="DataGridCell">
          <Setter Property="ToolTip" Value="{Binding ID, StringFormat=Tooltip for ID:{0}}" />
        </Style>
      </ctl:FieldHelp.Resources>
      <!-- The rest of your column etc -->
    

    但是,如果 FieldHelp 控件 (ctl:FieldHelp) 不是子类 DataGrid,那么我认为此解决方案不适合您。

    【讨论】:

    • 嗨@MarkGreen,我按照建议使用了以下代码,但没有出现工具提示:''
    • 我认为您可能需要与设计 FieldHelp 控件的人交谈,并询问他们在哪里放置 DataGridCells 的工具提示样式的最佳位置。它看起来像是一个定制的控件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2019-02-01
    • 2019-06-10
    • 2022-09-29
    • 1970-01-01
    相关资源
    最近更新 更多