我有一些文本框,并希望用水印为每个文本框设置样式(例如:文本框将包含文本'在此输入名字'直到您开始输入它。)
通常我会使用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>
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
你遇到的问题与样式设置器值绑定无关,它运行正常。 Content
属性中的问题以及将其绑定到父元素的方式。
问题:您始终要记住, WPF 资源中的样式不会被视为模板的一部分,因此 TemplatedParent
也是如此因为AncestorType
无法正常使用。
解决方案: 使用ControlTemplate
代替,这将允许访问类型为FrameworkElement
(或TextBox
)的父控件及其ToolTip
属性。