C# WPF文本框,提示为自定义/用户控件

C# WPF文本框,提示为自定义/用户控件,c#,.net,wpf,xaml,textbox,C#,.net,Wpf,Xaml,Textbox,所以,我正试图设计尽可能简约的UI,为此,我需要像android一样在文本框中提供提示。我已经找到了很多解决这个问题的方法,但是每个方法似乎都使用了大量的XAML代码、样式、触发器和排序。我想做的是,我想有一个textbox子类,它有一个HintText属性,我可以在任何地方使用它,但到目前为止,我还没有接近它。这是我得到的最接近的结果: <TextBox x:Class="MyProgram.CustomControls.HintTextBox" xmlns="

所以,我正试图设计尽可能简约的UI,为此,我需要像android一样在文本框中提供提示。我已经找到了很多解决这个问题的方法,但是每个方法似乎都使用了大量的XAML代码、样式、触发器和排序。我想做的是,我想有一个textbox子类,它有一个HintText属性,我可以在任何地方使用它,但到目前为止,我还没有接近它。这是我得到的最接近的结果:

<TextBox x:Class="MyProgram.CustomControls.HintTextBox"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" Text="ASDF"
             d:DesignHeight="174" d:DesignWidth="708">
    <TextBox.Resources>
        <VisualBrush x:Key="VB">
            <VisualBrush.Visual>
                <Label Content="{Binding Path=HintText}" Foreground="LightGray" FontSize="25"/>
            </VisualBrush.Visual>
        </VisualBrush>
    </TextBox.Resources>
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Setter Property="Background" Value="{StaticResource VB}"/>
        </Style>
    </TextBox.Style>
</TextBox>
它缺少触发器定义,但这不是这里的主要问题。我的主要问题是,我似乎无法绑定HintText属性。我不能通过XAML分配它,而且由于某种原因我不能绑定到它。我还尝试绑定到TextBox自己的文本属性,只是想看看它是否能工作,但没有。我做错了什么?还是我完全找错了方向


编辑:我还需要一个密码箱同样的功能,也没有任何进展。。。他们到底为什么要把文本框和密码框分开?

问题是,VisualBrush资源VB可以在所有元素之间共享,标签内容不能绑定


您可以尝试使用我的样本

我建议您使用。它是开源的,附带一个水印文本框。太好了,谢谢!仍然缺少密码框,但是…RE:无法绑定到HintText属性。。。缺少属性定义,这是对依赖项属性定义的补充。公共字符串HintText{get{return stringGetValueHintTextProperty;}set{SetValueHintTextProperty,value;}}}你知道,我以为clr属性只是一个缩写,不知道它是强制的。这解决了一部分问题,谢谢!很抱歉成为一个noob,但您愿意详细说明吗?好的,我试试:-您将VB VisualBrush定义为资源。WPF中的每个资源都是样式、颜色。。。共享。因此,当我们第一次使用这个资源时,VisualBrush中的标签被创建。此标签仅创建一次,并用于所有文本框。这就是为什么装订不起作用的原因。谢谢,我现在明白了!但我该怎么解决呢?嗨,我为错误的回答道歉。我以为您将HintTextbox作为CustomControl而不是UserControl。所以,若要从VisualBruh绑定标签内容,必须使用相对资源绑定。{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type my:HintTextBox},Path=HintText}my是HintTextBox的命名空间。但我仍然认为,正确的解决方案是使用自定义控件和模板,这是我在示例中介绍的
public partial class HintTextBox : TextBox
{
    public HintTextBox()
    {
        InitializeComponent();
    }

    public static DependencyProperty HintTextProperty = DependencyProperty.Register("HintText", typeof(String), typeof(HintTextBox));
}