代码之家  ›  专栏  ›  技术社区  ›  Siegfried.V

在GridViewColumn工具提示中未考虑样式

  •  -1
  • Siegfried.V  · 技术社区  · 6 年前

    所以我有以下问题:

    在我的 ListView 我想补充 ToolTips 具体到 GridViewColumns . 有时这些 工具提示 是空的,我需要把它们藏起来。

    当我有一个 ToolTip 在一 列表视图 行,在我的 App.xaml 文件:

    <Style TargetType="ToolTip">
       <Style.Triggers>
          <Trigger Property="Content" Value="{x:Static sys:String.Empty}">
             <Setter Property="Visibility" Value="Collapsed" />
          </Trigger>
          <Trigger Property="Content" Value="{x:Null}">
             <Setter Property="Visibility" Value="Collapsed" />
          </Trigger>
       </Style.Triggers>
    </Style>
    

    但在案例A中 工具提示 仅应用于 列表视图 ,我的XAML如下:

    <GridViewColumn Header="{x:Static p:Resources.Name}" Width="100">
       <GridViewColumn.CellTemplate>
          <DataTemplate>
             <Grid>
                <TextBlock Text="{Binding Path=Name}" Tag="{Binding Name}" 
                           MouseMove="mouseOverNameRepere">
                   <TextBlock.ToolTip>
                       <StackPanel>
                          <Grid>
                             <TextBlock Grid.Column="0" 
                                        Text="{Binding Path=ToolTipModifications}" 
                                        TextAlignment="Left" HorizontalAlignment="Left"/>
                          </Grid>
                       </StackPanel>
                   </TextBlock.ToolTip>
                </TextBlock>
             </Grid>
          </DataTemplate>
       </GridViewColumn.CellTemplate>
    </GridViewColumn>
    

    我怎样才能隐藏 工具提示 空的时候?我的密码 App.XAML 不起作用。 还尝试在代码隐藏中执行此操作:

    TextBlock item = (TextBlock)sender;
    ToolTip toolTip = (ToolTip)item.ToolTip;
    

    但第二行给了我一个例外 item.ToolTip 是一个 StackPanel 对象,无法转换? 实际上我计算 工具提示 仅当我输入 TextBox 元素,所以我想我会检查并应用 toolTip.Visibility 此时此刻,但我不能。

    3 回复  |  直到 6 年前
        1
  •  1
  •   IdontKnowMyName    6 年前

    使用矩形而不是工具提示

    <GridViewColumn Header="{x:Static p:Resources.Name}" Width="100">
        <GridViewColumn.CellTemplate>
            <DataTemplate>
                <Grid>
                    <TextBlock Text="{Binding Path=Name}" Tag="{Binding Name}"/>
                    <Rectangle Fill="Transparent" ToolTipService.ToolTip="{Binding Path=ToolTipModifications}" MouseEnter="UIElement_OnMouseEnter"/>
                </Grid>
            </DataTemplate>
        </GridViewColumn.CellTemplate>
    </GridViewColumn>
    

    然后在MouseEnter事件中检查toolTipModifications是否为空

    private void UIElement_OnMouseEnter(object sender, MouseEventArgs e)
    {
        if (sender is Rectangle rectangle)
        {
            if (string.IsNullOrEmpty(rectangle.ToolTip.ToString()))
            {
                rectangle.Visibility = Visibility.Collapsed;
            }
        }
    }
    
        2
  •  1
  •   mm8    6 年前

    你的 Style 如果你设置了 ToolTip 性质 TextBlock 这样地:

    <TextBlock Text="{Binding Path=Name}" Tag="{Binding Name}" MouseMove="mouseOverNameRepere" 
               ToolTip="{Binding Path=ToolTipModifications}" />
    
        3
  •  0
  •   Rakesh Dhamejani    6 年前
    Please try this Code
    
    
    <DataGridTextColumn Width="200" Binding="{Binding Name}">
        <DataGridTextColumn.ElementStyle>
            <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockDefaultStyle}">
                <Setter Property="ToolTip" Value="{Binding Name}">
                <Setter Property="ToolTipService.ShowDuration" Value="6000"> 
            </Style> 
        </DataGridTextColumn.ElementStyle> 
    </DataGridTextColumn>