WPF Binding in Style - PullRequest
       16

WPF Binding in Style

8 голосов
/ 30 марта 2010

Я пытаюсь собрать простой TextBox с текстом водяного знака в Background. Мой код основан на примере из блога Филиппа Патрика .

Я пытаюсь настроить его так, чтобы текст, отображаемый в фоновом режиме, был получен из свойства ToolTip в TextBox.

В настоящее время это работает:

<TextBox ToolTip="Type a name here...">
            <TextBox.Background>
                <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left">
                    <VisualBrush.Visual>
                        <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/>
                    </VisualBrush.Visual>
                </VisualBrush>
            </TextBox.Background>
        </TextBox>

Отображает текст ToolTip в Background из TextBox.

Но если я перенесу часть кода в стиль ресурсов, привязка больше не будет получать информацию ToolTip из TextBox:

<Grid>
    <Grid.Resources>
        <Style x:Key="WatermarkBackground" TargetType="{x:Type TextBox}">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left">
                        <VisualBrush.Visual>
                            <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Resources>

    <TextBox ToolTip="Type your name here..." Style="{StaticResource WatermarkBackground}"/>

Есть какие-нибудь советы здесь?

Ответы [ 2 ]

1 голос
/ 06 апреля 2010

У меня была идентичная проблема, и я решил ее, связавшись с PlacementTarget ToolTip Подробный ответ здесь текст ссылки

Джереми

1 голос
/ 30 марта 2010

Вы не можете получить доступ к TextBox так, как пытаетесь, ваш TextBlock не находится в визуальной иерархии вашего TextBox. Поэтому он не может найти TextBox. Вы можете попробовать с TextBox с водяными знаками. Отметьте для образца текстового поля с водяным знаком.

...