如何绑定样式的属性?

时间:2014-02-05 12:32:08

标签: .net wpf xaml binding

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

通常我会使用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 :(得分:0)

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

问题:您始终要记住, WPF 资源中的样式不会被视为模板的一部分,因此 TemplatedParent也是如此因为AncestorType无法正常使用

解决方案: 使用ControlTemplate代替,这将允许访问类型为FrameworkElement(或TextBox)的父控件及其ToolTip属性。