Как связать другой элемент в подсказке - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу привязать текст во всплывающей подсказке, но у меня есть одна проблема, это значение привязки, это другие элементы управления, поэтому я не могу получить их значение через привязку.

<TextBlock x:Name="txb2" Text="Hello Stackoverflow"/>

<TextBox Grid.Row="1" TextChanged="TextBox_TextChanged">
    <TextBox.ToolTip>
        <TextBlock>
            <Run Text="{Binding ElementName=txb2, Path=Text}" FontWeight="Bold"/>
        </TextBlock>
    </TextBox.ToolTip>
</TextBox>

В основном я пытался связать этот код.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Подсказки существуют вне визуального дерева, поэтому они не могут ссылаться на другие элементы управления по имени. Все, о чем знает всплывающая подсказка, - это собственный PlacementTarget - элемент UIE, против которого он отображается.

Один из способов разрешить всплывающей подсказке ссылаться на другие элементы управления - перехватить какое-либо иное неиспользуемое свойство этого целевого элемента управления размещением (тег чаще всего подходит), на которое затем может ссылаться подсказка.

<TextBox x:Name="txb2" Text="Hello Stackoverflow" Width="200" />

<TextBox Grid.Row="1" Tag="{Binding ElementName=txb2}" Width="200">
    <TextBox.ToolTip>
        <ToolTip DataContext="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource Self}}">
            <TextBlock>
                <Run Text="{Binding Text}" FontWeight="Bold" />
            </TextBlock>
         </ToolTip>
    </TextBox.ToolTip>
</TextBox>

если вы используете шаблон проектирования MVVM, альтернативный метод (который не требует перехвата свойств) - это привязка к DataContext объекта PlacementTarget (обычно ViewModel). Затем вы можете привязать содержимое всплывающей подсказки к любому свойству, которое вам нравится.

<ToolTip DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
    ....
0 голосов
/ 15 ноября 2018

Если вы посмотрите на вывод, вы увидите ошибку:

System.Windows.Data Ошибка: 4: не удается найти источник для связывания с ссылка "ElementName = txb2". BindingExpression: Path = Text; DataItem = NULL; целевой элемент - «Выполнить» (HashCode = 58577354); цель свойство 'Текст' (тип 'Строка')

Вы можете исправить это, используя x: Ссылка:

<TextBlock x:Name="txb2" Text="Hello Stackoverflow"/>

<TextBox Grid.Row="1">
    <TextBox.ToolTip>
        <TextBlock>
            <Run Text="{Binding Source={x:Reference txb2}, Path=Text}" FontWeight="Bold"/>
        </TextBlock>
    </TextBox.ToolTip>
</TextBox>

Что касается разницы между ElementName и x: Reference, взгляните на следующий thread . ElementName не работает, так как Tooltip не является свойством пользовательского интерфейса, но ElementName работает только с иерархией элементов пользовательского интерфейса (Visual Tree) при поиске txb2.

...