2015-10-21 2 views
0

Учитывая объект, такие как:Как присвоить подсказку ListViewItem ToolTip над подсказкой TextBlock?

public class Item 
{ 
    public string Foo { get; set; } 
    public string Bar { get; set; } 
    public int Hidden { get; set; } 
} 

Просто отображаются как:

<Grid> 
    <Grid.Resources> 
     <!-- style stuff --> 
    </Grid.Resources> 
    <ListView 
     x:Name="ItemsListView" 
     ItemsSource="{Binding AllItems}" 
     SelectedValue="{Binding SelectedItem}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn 
        Width="75" 
        DisplayMemberBinding="{Binding Foo, Mode=OneWay}" 
        Header="Foo"/> 
       <GridViewColumn 
        Width="75" 
        DisplayMemberBinding="{Binding Bar, Mode=OneWay}" 
        Header="Bar"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 
</Grid> 

В Grid.Resources я создал следующий стиль, чтобы позволить ToolTip для отображения каждого значения клеток на парении:

<Style TargetType="{x:Type TextBlock}"> 
    <Setter 
     Property="ToolTip" 
     Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"/> 
    <Setter 
     Property="TextTrimming" 
     Value="CharacterEllipsis"/> 
</Style> 

Это работает по желанию. Но теперь я хочу проверить строку на основе свойства Hidden. Если значение -1, очертить строку в красном и отображать TooTip сообщений:

<Style TargetType="{x:Type ListViewItem}"> 
    <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding Hidden}" 
      Value="-1"> 
      <Setter Property="BorderBrush" Value="Red"/> 
      <Setter Property="ToolTip" Value="Bad Item... Bad!"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Это также работает, до тех пор, как я носился над границами ячеек недействительного элемента. В тот момент, когда я нависаю над ячейкой Foo или Bar недействительного элемента, отображается предыдущее ToolTip, отображающее значение ячейки.

gif of current working code

Как я могу получить ListViewItem.ToolTip переопределить TextBlock.ToolTip, когда строка является недействительным?

ответ

1

Вы можете установить стиль TextBlock следующим образом, чтобы ToolTip был установлен в DataTrigger для указанного условия. В этом случае, если ToolTip не установлен в GridViewColumn, то всплывающая подсказка ListViewItem появится автоматически.

<Style TargetType="{x:Type TextBlock}"> 
    <Setter 
     Property="TextTrimming" 
     Value="CharacterEllipsis"/> 
    <Setter Property="HorizontalAlignment" Value="Stretch" /> 
    <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding Hidden}" 
      Value="0"> 
      <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=Text}"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

Это почти отлично работает, за исключением того, что оно работает только для 'Hidden == 0', но должно работать для' Hidden> -1'. – OhBeWise

+0

Вы не можете поместить триггер данных для предложения больше чем. Таким образом, вы можете попробовать использовать Конвертер, который преобразует значение свойства Hidden в булевский флаг, чтобы применить установщик в триггере данных. – user1672994

+0

Да, просто найдено то же предложение [здесь] (http://stackoverflow.com/a/793966/3773066). Спасибо за вашу помощь. – OhBeWise

Смежные вопросы