gpt4 book ai didi

c# - WPF。文本框和密码框中的背景帮助文本

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:10 24 4
gpt4 key购买 nike

我正在编写一个基于 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中的背景文字?谢谢!

最佳答案

如果我没理解错的话,您想要的是一个 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,这在资源方面太过分了,在某些情况下您可能会得到糟糕的渲染效果。希望这对您有所帮助,问候!

关于c# - WPF。文本框和密码框中的背景帮助文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com