首页 文章

如何绑定样式的属性?

提问于
浏览
0

我有几个文本框,并希望用水印为每个文本框设置样式(例如:文本框将包含文本'在此输入名字',直到您开始输入它为止 . )

通常我只会使用RelativeSource绑定,但我遇到了一个奇怪的错误,其中样式中的Label不会接受我抛出的任何绑定 . 例如,以下Binding可以在任何地方使用,但Label的内容:

{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=Title}

这里参考的是我正在使用的代码 .

TextBox的XAML:

<TextBox x:Name="textBox_test" Style="{StaticResource textBoxStyle_watermark}" ToolTip="Hello"

Style的XAML:

<Style x:Key="textBoxStyle_watermark" TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib">
        <Style.Resources>
            <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="None">
                <VisualBrush.Visual>
                    <Label Padding="10,0,0,0" Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ToolTip}" Foreground="Gray" />
                </VisualBrush.Visual>
            </VisualBrush>
        </Style.Resources>
        <Style.Triggers>
            <Trigger Property="Text" Value="{x:Static sys:String.Empty}">
                <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
            </Trigger>
            <Trigger Property="Text" Value="{x:Null}">
                <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
            </Trigger>
            <Trigger Property="IsKeyboardFocused" Value="True">
                <Setter Property="Background" Value="White" />
            </Trigger>
        </Style.Triggers>
    </Style>

任何帮助将不胜感激,谢谢 .

1 回答

  • 0

    您遇到的问题与样式设置器值绑定无关,它工作正常 . Content 属性中的问题以及将其绑定到父元素的方式 .

    Problem: 您始终要记住,在 WPF 资源中的样式不会被视为模板的一部分,因此 TemplatedParent 以及 AncestorType 将无法在样式中使用 .

    Solution: 使用带有适当画笔的 ControlTemplate ,这将允许访问类型 FrameworkElement (或 TextBox )及其 ToolTip 属性的父控件 .

相关问题