Стиль, не принятый во внимание в подсказке GridViewColumn - PullRequest
0 голосов
/ 17 декабря 2018

Итак, у меня следующая проблема:

В моем ListView я хочу добавить ToolTips к конкретному GridViewColumns.Иногда эти ToolTips пусты, и мне нужно их скрыть.

Когда у меня есть ToolTip в строке ListView, у меня не возникает проблем при выполнении следующих действий в моем файле 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>

Но если ToolTip применяется только к одному столбцу моего ListView, мой 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>

Как мне скрыть ToolTip когда он пуст?Код в моем App.xaml не работает.Также пытался сделать это в коде:

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

Но вторая строка дает мне исключение, так как item.ToolTip является StackPanel объектом и не может быть преобразован?Фактически я вычисляю содержимое ToolTip только при вводе элемента TextBox, поэтому я подумал, что в этот момент я проверю и приму toolTip.Visibility, но не смог.

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Используйте Rectangle вместо всплывающей подсказки

<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>

Затем проверьте, пусто ли ToolTipModification в событии MouseEnter

private void UIElement_OnMouseEnter(object sender, MouseEventArgs e)
{
    if (sender is Rectangle rectangle)
    {
        if (string.IsNullOrEmpty(rectangle.ToolTip.ToString()))
        {
            rectangle.Visibility = Visibility.Collapsed;
        }
    }
}
0 голосов
/ 17 декабря 2018

Ваш Style должен работать, если вы установите свойство ToolTip для TextBlock следующим образом:

<TextBlock Text="{Binding Path=Name}" Tag="{Binding Name}" MouseMove="mouseOverNameRepere" 
           ToolTip="{Binding Path=ToolTipModifications}" />
0 голосов
/ 17 декабря 2018
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> 
...