Как привязать ширину шаблона всплывающей подсказки к ширине текстового поля? - PullRequest
0 голосов
/ 21 июня 2020

Моя проблема в том, что я не могу установить ширину всплывающей подсказки TextBox. Всплывающая подсказка должна иметь ту же ширину, что и текстовое поле, содержащееся в ней.

пожалуйста, обратите внимание на этот код:

<TextBox Text="{Binding PatientSubStay.Observations, Mode=OneWay}" ToolTip="{Binding}" x:Name="ObservationsTextBox" MaxLength="100">
    <TextBox.Resources>
        <Style TargetType="ToolTip">
            <Setter Property="Template" Value="{StaticResource ObservationsToolTipControlTemplate}"/>
            <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBox}}, Path=Width}"/>
        </Style>        
    </TextBox.Resources>
</TextBox>

Всплывающая подсказка устанавливается шаблоном, и моя попытка изменить его ширину с помощью установщика это сбой:

failure

thank you.

EDIT: here is the template (it's a preversion):

    

EDIT:

С сеттером, подобным тому из ответа Перегрина, я получаю этот рендеринг:

better bot not perfect

I wonder why the widths are not equal.

for information, here is the code corresponding to the picture above:

Ответы [ 2 ]

1 голос
/ 21 июня 2020

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

Следующий код демонстрирует, как выполнить привязку к свойству PlacementTarget

<TextBox Text="Some text for the text box" ToolTip="tool tip">
    <TextBox.Resources>
        <Style TargetType="{x:Type ToolTip}">
            <Setter Property="Width" Value="{Binding PlacementTarget.ActualWidth, RelativeSource={RelativeSource Self}}"/>
        </Style>
     </TextBox.Resources>
</TextBox> 

Обратите внимание, что вы должны использовать ActualWidth, а не Width, чтобы получить размер другого элемента управления, поскольку Width может не иметь значения.

1 голос
/ 21 июня 2020

Попробуйте установить ActualWidth TextBox во всплывающей подсказке. Если вы не устанавливаете ширину (или ширину = Авто), значение будет двойным. Приведенный ниже код работал у меня.

<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBox}}, Path=ActualWidth}"/>
...