【问题标题】:Unable to set DataGridColumn's ToolTip无法设置 DataGridColumn 的 ToolTip
【发布时间】:2010-12-16 16:10:30
【问题描述】:

我尝试了以下方法:

<tk:DataGridTextColumn 
    Header="Item" 
    Binding="{Binding Item.Title}" 
    ToolTipService.ToolTip="{Binding Item.Description}" />

而且我没有看到任何工具提示。

有什么想法吗? 有没有实现?

【问题讨论】:

    标签: wpf datagrid wpf-controls wpftoolkit datagridcolumn


    【解决方案1】:

    请检查下面的代码是否适合您,它应该显示列标题和单元格的工具提示,单元格的工具提示应该弯曲数据对象的描述字段:

    <DataGridTextColumn Width="SizeToCells"   
                        MinWidth="150" 
                        Binding="{Binding Name}">
    
        <DataGridTextColumn.Header>
            <TextBlock Text="Name" ToolTipService.ToolTip="Header ToolTip" />
        </DataGridTextColumn.Header>
    
        <DataGridTextColumn.ElementStyle>
            <Style TargetType="{x:Type TextBlock}">
                <Setter Property="ToolTip" Value="{Binding Description}" />
                <Setter Property="TextWrapping" Value="Wrap" />
            </Style>
        </DataGridTextColumn.ElementStyle>
    </DataGridTextColumn>
    

    在这里找到解决方案:5 Random Gotchas with the WPF DataGrid

    【讨论】:

      【解决方案2】:

      DataGridTextColumn 不可见。您必须在标题或内容上设置工具提示。

      要在标题上设置 ToolTip,请将 Header 更改为 TextBlock:

      <tk:DataGridTextColumn
        Binding="{Binding Item.Title}">
        <tk:DataGridTextColumn.Header>
          <TextBlock
            Text="Text" 
            ToolTipService.ToolTip="Tooltip for header" />
        </tk:DataGridTextColumn.Header>
      </tk:DataGridTextColumn>
      

      要在列内容上设置工具提示,请在样式中设置:

      <tk:DataGridTextColumn
        Binding="{Binding Item.Title}"
        Heading="Text">
        <tk:DataGridTextColumn.ElementStyle>
          <Style>
            <Setter Property="ToolTipService.ToolTip" Value="{Binding Item.Description}" />
          </Style>
        </tk:DataGridTextColumn.ElementStyle>
      </tk:DataGridTextColumn>
      

      您可能还想设置EditingElementStyle

      【讨论】:

        【解决方案3】:

        这对我有用:

        <Style TargetType="{x:Type Custom:DataGridColumnHeader}">
           <Style.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                  <Setter Property="ToolTip" Value="{Binding Column.(ToolTipService.ToolTip), RelativeSource={RelativeSource Self}}"/>
              </Trigger>
           </Style.Triggers>
        </Style>
        

        【讨论】:

        • 太棒了!这个小样式现在使工具提示出现,不必将 DataGridColumnHeaders 更改为 DataGridTextColumns 或任何东西。正是我想要的!
        • 嘿,你能告诉我你是如何将上述样式添加到 DataGridComboBoxColumn
        【解决方案4】:

        在 Header 样式中设置 ToolTipService.ToolTip 属性:

        <Setter Property="ToolTipService.ToolTip" Value="{x:Static res:StringResources.List_Dialog_SelectAll_Checkbox}"/>
        

        这是我在 DataGridCheckBoxColumn 中使用图像而不是文本时使用它的方式。 XAML:

            <Window x:Class="MyProject.GUI.ListDialog"
                    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:viewModel="clr-MyProject.GUI.ViewModels" 
                    Title="{Binding Title}"  Height="350" Width="650"
                    MinHeight="350" MinWidth="650"
                    xmlns:res="clr-MyProject.GUI.Resources" Closing="Window_Closing" WindowStyle="ToolWindow">
            <Window.Resources>
                    <BitmapImage x:Key="MyImageSource" UriSource="Resources/Images/SelectDeselect.png" />
                   <Style x:Key="CheckBoxHeader"  TargetType="DataGridColumnHeader">
                        <Setter Property="HorizontalContentAlignment" Value="Center"/>
                        <Setter Property="VerticalContentAlignment" Value="Center"/>
                                    <Setter Property="ToolTipService.ToolTip" Value="{x:Static res:StringResources.List_Dialog_SelectAll_Checkbox}"/>
                        <Setter Property="ContentTemplate">
                            <Setter.Value>
                                <DataTemplate>
                                    <Image Width="15" Height="15" Source="{StaticResource MyImageSource}" />
                                </DataTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
            </Window.Resources>
        

        C#:

        DataGridCheckBoxColumn checkColumn = new DataGridCheckBoxColumn();
        checkColumn.HeaderStyle = new System.Windows.Style();
        checkColumn.CanUserSort = checkColumn.CanUserResize = false;
        checkColumn.Width = new DataGridLength(25);
        checkColumn.HeaderStyle = (Style)Resources["CheckBoxHeader"];
        checkColumn.CellStyle = (Style)Resources["CenterAlignedCellStyle"];
        checkColumn.IsReadOnly = false;
        dataGrid.Columns.Add(checkColumn);
        

        【讨论】:

          【解决方案5】:

          此外,如果您的列是 DataGridTemplateColumn 而不是 DataGridTextColumn,您可以这样做:

          <DataGridTemplateColumn x:Name="MyCheckBoxColumn" CellStyle="{StaticResource MyCellStyle}" >
              <DataGridTemplateColumn.HeaderTemplate>
                  <DataTemplate>
                      <TextBlock Text="MyHeaderName" ToolTip="This is my column description" />
                  </DataTemplate>
              </DataGridTemplateColumn.HeaderTemplate>
              <DataGridTemplateColumn.CellTemplate>
                  <DataTemplate>
                      <CheckBox ... />
                  </DataTemplate>
              </DataGridTemplateColumn.CellTemplate>
          </DataGridTemplateColumn>
          

          【讨论】:

            猜你喜欢
            • 2010-12-21
            • 2023-04-01
            • 2020-07-15
            • 1970-01-01
            • 2014-12-02
            • 1970-01-01
            • 2017-03-29
            • 1970-01-01
            • 2014-12-26
            相关资源
            最近更新 更多