如何将背景添加到文本框提示横幅

时间:2014-02-20 13:57:04

标签: c# wpf textbox

This question向我展示了如何在我的TextBox中添加水印文字。我试图在我的项目中实现它,但它取代了我的TextBox的背景。

由于我的面板颜色不同,因此通过文本框显示该面板颜色。如何正确设置?

我试图将标签的背景设置为白色,但这不起作用,因为它没有拉伸。

<TextBox>
    <TextBox.Style>
        <Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib">
            <Style.Resources>
                <VisualBrush x:Key="CueBannerBrush" AlignmentX="Left" AlignmentY="Center" Stretch="Uniform">
                    <VisualBrush.Visual>
                        <!-- set the background to white -->
                        <Label Content="Search" Foreground="LightGray" Background="White"/>
                    </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>
    </TextBox.Style>
</TextBox>

这给出了以下内容:

uniform stretched background

但是将Stretch设置为Fill会为拉伸文本提供此结果:

fill stretched background

2 个答案:

答案 0 :(得分:0)

这可能不是最好的解决方案,但是如果我的控件的行为与他们的行为不同,我想自己创建它们。这样我就可以完全控制并确切知道当我这样做时会发生什么。

class TextBoxWaterMark : TextBox
{

#region Datafields

private string pm_WaterMark = "";

#endregion

#region Constructor

public TextBoxWaterMark()
{
}

#endregion

#region Control events
protected override void OnGotFocus(RoutedEventArgs e)
{
  base.OnGotFocus(e);
  if ((string)this.Tag != "")
  {
    this.Foreground = new SolidColorBrush(Colors.Black);
    this.Text = "";
  }
}

protected override void OnLostFocus(RoutedEventArgs e)
{
  base.OnLostFocus(e);
  if ((string)this.Tag != "")
  {
    if (this.Text == "")
    {
      this.Text = pm_WaterMark;
      this.Foreground = new SolidColorBrush(Colors.Gray);
    }
  }
}
#endregion

#region Public get and set methods

public string WaterMark 
{
  get { return pm_WaterMark; } 
  set 
  {
    pm_WaterMark = value;
    this.Text = pm_WaterMark; 
    this.Foreground = new SolidColorBrush(Colors.Gray);
  } 
}
#endregion

然后在我的XAML代码中,我只需添加它,就像我想要的那样。

 <Form:TextBoxWaterMark WaterMark="Insert watermark text here" />

希望这就是你要找的东西:P

答案 1 :(得分:-3)

您可以在文本框后面添加一些内容:

    <StackPanel background="white">
      <textbox>
      </textbox>
    </StackPanel>

我认为你文本框的右边部分是透明的,对吗? 我还认为有一个比StackPanel更好的组件来做到这一点。