Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何绑定样式';谁的财产?_.net_Wpf_Xaml_Binding - Fatal编程技术网

.net 如何绑定样式';谁的财产?

.net 如何绑定样式';谁的财产?,.net,wpf,xaml,binding,.net,Wpf,Xaml,Binding,我有几个文本框,并希望每个文本框都带有水印(例如:文本框将包含文本“在此处输入名字”,直到您开始键入为止) 通常我只会使用RelativeSource绑定,但我遇到了一个奇怪的错误,即样式中的标签不接受我抛出的任何绑定。例如,除了标签的内容外,以下绑定在任何地方都有效: {Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=Title} 这里是我正在使用的代码,仅供参

我有几个文本框,并希望每个文本框都带有水印(例如:文本框将包含文本“在此处输入名字”,直到您开始键入为止)

通常我只会使用RelativeSource绑定,但我遇到了一个奇怪的错误,即样式中的标签不接受我抛出的任何绑定。例如,除了标签的内容外,以下绑定在任何地方都有效:

{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>