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>
这给出了以下内容:
但是将Stretch设置为Fill会为拉伸文本提供此结果:
答案 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更好的组件来做到这一点。