我正在编写一个基于WPF的应用程序,我遇到了问题。我已经搜索了几个星期的答案,但仍然找不到解决方案。问题是:我无法用提示显示背景文字。我正在使用自己的书面风格并尝试通过触发器显示文本。这是我制作的代码示例:
<Style TargetType="{x:Type TextBox}" x:Key="DCTextBox">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Foreground" Value="#21346b"/>
<Setter Property="FontFamily" Value="Fonts/#BankGothic Md BT"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Border CornerRadius="5" BorderThickness="6" BorderBrush="#21346b" Background="White" >
<ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Resources>
<VisualBrush x:Key="HelpBrush" Opacity="0.4" Stretch="None" AlignmentX="Left" >
<VisualBrush.Visual>
<TextBlock FontStyle="Italic" Text="Type or select from list" Background="Black"/>
</VisualBrush.Visual>
</VisualBrush>
</Style.Resources>
<Style.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Control.Background" Value="{StaticResource HelpBrush}"/>
</Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Control.Background" Value="{StaticResource HelpBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
请告诉我哪里可能有问题?哦,还有一个问题:是否可以使用类似的方法在passwordbox中输出背景文本?谢谢!
答案 0 :(得分:0)
如果我理解正确的话,你想要的是一个TextBox,它在空的时候会显示一些文字但没有聚焦,以便告诉用户如何处理它。为此,我建议创建一个继承自TextBox的新控件,因此在设置样式时,不会影响应用程序中的所有TextBox。向其添加DependencyProperty,以便您可以在XAML中设置帮助文本。
public class MyTextBox : TextBox
{
public static DependencyProperty LabelTextProperty =
DependencyProperty.Register(
"LabelText",
typeof(string),
typeof(MyTextBox));
}
定义你的风格,在这种情况下我这样做(我只是发布相关的部分,你可以让它看起来很漂亮):
<Style x:Key="{x:Type local:MyTextBox}" TargetType="{x:Type local:MyTextBox}">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyTextBox}">
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="Visibility" TargetName="LabelText" Value="Hidden" />
</Trigger>
<Trigger Property="HasText" Value="True">
<Setter Property="Visibility" TargetName="LabelText" Value="Hidden" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Style>
你这样使用它:
<Local:MyTextBox LabelText="This is the tip for the user" Text="{Binding SomeProperty}"/>
关于密码箱,我没有尝试,但它应该工作得很好。如果LabelText显示为“xxxxxxxxx”,我相信你会找到一个解决方法(突然之间,我可以想到在PasswordBox中创建一个TextBlock类型的DependencyProperty,用Tip字符串设置其内容,并隐藏/显示整个事情。)
最后一个建议:当你只是想显示一个文本时,不要花费使用VisualBrush的费用,它在资源方面太过分了,在某些情况下你可能会得到一个糟糕的渲染。希望这有帮助,尊重!
答案 1 :(得分:0)
我做了一些修正,它对我来说很好。
<Style TargetType="{x:Type TextBox}" x:Key="DCTextBox">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Foreground" Value="#21346b"/>
<Setter Property="FontFamily" Value="Fonts/#BankGothic Md BT"/>
<Style.Resources>
<VisualBrush x:Key="HelpBrush" Opacity="0.4" Stretch="None" AlignmentX="Left" >
<VisualBrush.Visual>
<TextBlock FontStyle="Italic" Text="Type or select from list" Foreground="Black"/>
</VisualBrush.Visual>
</VisualBrush>
</Style.Resources>
<Style.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource HelpBrush}"/>
</Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Background" Value="{StaticResource HelpBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
希望它有所帮助。