代码之家  ›  专栏  ›  技术社区  ›  Sean Turner

如何从XAML为样式中的控件指定工具提示?

  •  14
  • Sean Turner  · 技术社区  · 15 年前

    我最接近的方法是使用带有Setter的行样式来设置工具提示,但这似乎只适用于文本。当我尝试将ControlTempalte作为工具提示的值放入时,它会显示在ControlTemplate类型上调用ToString的结果。

    我想我需要设置工具提示的“模板”属性,但我似乎不知道该怎么做。。。

      <dg:DataGrid Name="dgResults" AutoGenerateColumns="True">
    
                <dg:DataGrid.RowStyle >
    
    
                <Style TargetType="{x:Type dg:DataGridRow}">
    
                    <Setter Property="ToolTip"  >
                        <Setter.Value>
    
                            <ControlTemplate TargetType="{x:Type ToolTip}">
                               <StackPanel>
                                     <TextBlock>txt1</TextBlock><TextBlock>txt2</TextBlock>
                               </StackPanel>
                            </ControlTemplate>
    
    
                        </Setter.Value>
                    </Setter>
                </Style>
    
            </dg:DataGrid.RowStyle>
    
      </dg:DataGrid>
    
    6 回复  |  直到 14 年前
        1
  •  28
  •   Sean Turner    15 年前

    我想出来了。。。花了我大约6个小时。。。

    由于某些原因,我无法直接使用value.Setter设置值。但是,如果我将工具提示的内容定义为静态资源,然后在DataGrid.RowStyle的Style属性中设置它,它就会工作。

                <Style TargetType="{x:Type dg:DataGridRow}">
    
                    <Setter Property="ToolTip" Value="{StaticResource resKWIC}">
                    </Setter>                 
                </Style>
    
            </dg:DataGrid.RowStyle>
    

    资源是

    <Window.Resources>
        <StackPanel x:Key="resKWIC">
            <TextBlock>f1</TextBlock>
            <TextBlock>f2></TextBlock>
        </StackPanel>
    </Window.Resources>
    

    谢谢

        2
  •  6
  •   TI82    14 年前

    关键是使用属性ToolTipService.ToolTip,而不是ToolTip-如下所示:

    <Setter Property="ToolTipService.ToolTip" Value="My Tooltip"/>
    
        3
  •  1
  •   Adi Lester    12 年前

    <DataGrid AutoGenerateColumns="False" CanUserAddRows="False" EnableRowVirtualization="False" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" IsReadOnly="True" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" Name="dgrTextGroupText" VerticalContentAlignment="Stretch" Grid.Column="3" Grid.Row="1" Grid.RowSpan="6" CanUserReorderColumns="False" CanUserSortColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Name}" Width="*" />
            <DataGridTextColumn Binding="{Binding Text}" Width="0" Visibility="Hidden" />
        </DataGrid.Columns>
        <DataGrid.RowStyle>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=DataContext.text}" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.RowStyle>
    </DataGrid>
    
        4
  •  0
  •   Jake Ginnivan    15 年前

    不确定您是否可以通过XAML完成。

    更简单的方法可能是只处理LoadingRow事件。在xaml中,有如下内容:

    <dg:DataGrid Name="dgResults" AutoGenerateColumns="True" 
                 LoadingRow="dgResults_LoadingRow" 
                 ItemsSource="{Binding ListOfStrings}" />
    

    然后是代码隐藏

    void dgResults_LoadingRow(object sender, DataGridRowEventArgs e)
    {
        DataGridRow row = e.Row;
        row.ToolTip = row.DataContext as string;
    }
    

        5
  •  0
  •   sondlerd    13 年前

    我需要根据单元格内容动态设置工具提示。我正在使用工具提示显示单元格中的文本溢出文本。下面的绑定来自名为CellText的c#类属性。感谢上面的帖子让我避免了自己搞清楚整个事情。

    <DataGridTextColumn Header="HeaderText" Binding="{Binding DisplayText, Mode=OneWay}" Width="33*">
                                <DataGridTextColumn.CellStyle>
                                    <Style>
                                        <Setter Property="ToolTipService.ToolTip" Value="{Binding DisplayText, Mode=OneWay}"/>
                                    </Style>
                                </DataGridTextColumn.CellStyle>
                            </DataGridTextColumn>
    
        6
  •  0
  •   Tim Cooper    13 年前

    ControlTemplate StackPanel ToolTip ,只需将其设置为:

    <Setter Property="ToolTip">
        <Setter.Value>
            <StackPanel>
                <TextBlock>txt1</TextBlock><TextBlock>txt2</TextBlock>
            </StackPanel>
        </Setter.Value>
    </Setter>