Как привязать всплывающую подсказку ListViewItem к всплывающей подсказке TextBlock внутри его ContentTemplate
Я хотел бы привязать подсказку моего ListViewItem к подсказке TextBlock его ContentTemplate.
Я попробовал следующее, но это не сработало:
<ListView ItemsSource="{Binding DoestMatter}" >
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ToolTip" Value="{Binding ElementName=Title, Path=ToolTip}"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock x:Name="Title" Text="{Binding Title}" ToolTip="Test"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Значение всплывающей подсказки генерируется динамически, здесь я просто показал ее как статическую строку, но на самом деле это не так, и поэтому мне нужно привязать ее к всплывающей подсказке TextBlock.
Как я могу заставить это работать?
1 ответ
Ваш код работает так же хорошо, как и... ну, мне пришлось изменить некоторые Binding
чтобы заставить его работать, но основной XAML в порядке:
<ListView ItemsSource="{Binding Tests}" >
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ToolTip" Value="{Binding ToolTip, ElementName=Title}" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock x:Name="Title" Text="{Binding Name}"
ToolTip="Test" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Тем не менее, одна вещь, которую я заметил, состояла в том, что это работает, только если вы поместите курсор прямо на TextBlock
и это не растянулось по ширине ListViewItem
, Чтобы это исправить, просто установите HorizontalContentAlignment
собственность на Stretch
:
<ListView ItemsSource="{Binding Tests}" >
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ToolTip" Value="{Binding ToolTip, ElementName=Title}" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock x:Name="Title" Text="{Binding Name}"
ToolTip="Test" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
ОБНОВЛЕНИЕ >>>
Ты прав... ToolTip
был еще на TextBlock
, Тогда вам просто нужно обновить свой ToolTip.Binding
на * то же значение, которое работает на Text
имущество:
<ListView ItemsSource="{Binding Tests}" >
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ToolTip" Value="{Binding ToolTip}" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock x:Name="Title" Text="{Binding Title}"
ToolTip="{Binding ToolTip}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Теперь вы должны увидеть 2 подсказки, одна над TextBlock
и один, когда над ListViewItem
,
ОБНОВЛЕНИЕ 2 >>>
@ Рон, я действительно не могу понять, почему ты так негативно относишься к моему ответу (ам)... ты действительно должен следить за своим отношением, потому что я пытаюсь помочь тебе, и я не чувствую, что заслуживаю твоего плохого отношения, Итак, чтобы ответить на ваш второй, даже более грубый комментарий:
- Я сказал, что HorizontalAlignment по умолчанию установлен на Stretch
В самом деле? Где ты это сказал? На самом деле, вы не сказали этого, вы сказали, что ListViewItem растягивается по умолчанию, что является совершенно другим. Как уже упоминалось в комментарии, я растягивал TextBlock
внутри ListViewItem
с HorizontalContentAlignment
свойство, которое не установлено в Strecth
по умолчанию.
- Кто сказал, что я хочу название в качестве подсказки?
Никто не говорил этого, но вы сказали, что значение всплывающей подсказки генерируется динамически... поэтому я могу только представить, что вы Binding
ваш динамически генерируется ToolTip
, Если это так, то вы можете просто данные Bind
это же значение для ListViewItem.ToolTip
собственность также.
ОБНОВЛЕНИЕ 3 >>>
В ответ на ваш последний комментарий:
Я придерживаюсь своего вопроса с самого начала, потому что я не могу действительно объяснить проблему. Я знаю, что решение, хотя я не знаю практического пути. Я хочу привязать к
TextBlock
"sToolTip
Имущество.
Что ж, извините, но вы не можете сделать это в XAML, потому что TextBlock
объявлен в DataTemplate
, Вы можете получить доступ только DataTemplate
сгенерированные элементы в коде, потому что они не существуют до времени выполнения... см. страницу Как: найти элементы, сгенерированные DataTemplate на MSDN, чтобы узнать, как это сделать. Таким образом, вам придется найти другой способ достижения своей цели, и именно поэтому я предлагал эти другие методы все время.