Как привязать всплывающую подсказку 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 >>>

@ Рон, я действительно не могу понять, почему ты так негативно относишься к моему ответу (ам)... ты действительно должен следить за своим отношением, потому что я пытаюсь помочь тебе, и я не чувствую, что заслуживаю твоего плохого отношения, Итак, чтобы ответить на ваш второй, даже более грубый комментарий:

  1. Я сказал, что HorizontalAlignment по умолчанию установлен на Stretch

В самом деле? Где ты это сказал? На самом деле, вы не сказали этого, вы сказали, что ListViewItem растягивается по умолчанию, что является совершенно другим. Как уже упоминалось в комментарии, я растягивал TextBlock внутри ListViewItem с HorizontalContentAlignment свойство, которое не установлено в Strecth по умолчанию.

  1. Кто сказал, что я хочу название в качестве подсказки?

Никто не говорил этого, но вы сказали, что значение всплывающей подсказки генерируется динамически... поэтому я могу только представить, что вы Binding ваш динамически генерируется ToolTip, Если это так, то вы можете просто данные Bind это же значение для ListViewItem.ToolTip собственность также.


ОБНОВЛЕНИЕ 3 >>>

В ответ на ваш последний комментарий:

Я придерживаюсь своего вопроса с самого начала, потому что я не могу действительно объяснить проблему. Я знаю, что решение, хотя я не знаю практического пути. Я хочу привязать к TextBlock "s ToolTip Имущество.

Что ж, извините, но вы не можете сделать это в XAML, потому что TextBlock объявлен в DataTemplate, Вы можете получить доступ только DataTemplate сгенерированные элементы в коде, потому что они не существуют до времени выполнения... см. страницу Как: найти элементы, сгенерированные DataTemplate на MSDN, чтобы узнать, как это сделать. Таким образом, вам придется найти другой способ достижения своей цели, и именно поэтому я предлагал эти другие методы все время.

Другие вопросы по тегам