.net 如何绑定样式';谁的财产?
我有几个文本框,并希望每个文本框都带有水印(例如:文本框将包含文本“在此处输入名字”,直到您开始键入为止) 通常我只会使用RelativeSource绑定,但我遇到了一个奇怪的错误,即样式中的标签不接受我抛出的任何绑定。例如,除了标签的内容外,以下绑定在任何地方都有效:.net 如何绑定样式';谁的财产?,.net,wpf,xaml,binding,.net,Wpf,Xaml,Binding,我有几个文本框,并希望每个文本框都带有水印(例如:文本框将包含文本“在此处输入名字”,直到您开始键入为止) 通常我只会使用RelativeSource绑定,但我遇到了一个奇怪的错误,即样式中的标签不接受我抛出的任何绑定。例如,除了标签的内容外,以下绑定在任何地方都有效: {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=Title} 这里是我正在使用的代码,仅供参
{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=Title}
这里是我正在使用的代码,仅供参考 TextBox的XAML:
<TextBox x:Name="textBox_test" Style="{StaticResource textBoxStyle_watermark}" ToolTip="Hello"
您遇到的问题与样式设置器值绑定无关,它工作正常。属性中的问题以及将其绑定到父元素的方式
问题:您始终要记住,在WPF中,资源中的样式未被视为模板的一部分,因此TemplatedParent
以及AncestorType
将无法按样式工作
解决方案:使用带有适当画笔的ControlTemplate
,这将允许访问类型为FrameworkElement
(或TextBox
)的父控件及其工具提示
属性。谢谢您告诉我ControlTemplate!水印问题现已修复,但我遇到了选项卡控件的问题。不过,我会将其作为另一个问题提交。
<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>