XAML 更改密码框占位符文本前景颜色

0lvr5msh  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个密码箱

<PasswordBox 
    MaxLength="12" 
    PlaceholderText="Password" 
    Foreground="Black" 
    Background="#eeeeee"/>

我想改变PlaceholderForeground的颜色,就像我在一个普通的TextBox上一样,但没有这样的属性,在互联网上搜索后,我发现没有解决方案,A为我工作B我明白,所有的xaml代码都太长了,样式和资源都有50行,对于这样一个简单的属性更改,我不知道为什么WPF必须如此过于复杂,没有理由
有没有人能提出一个解决方案,可能不是50行xaml代码,只是改变PasswordBox中占位符文本的前景色。

polkgigr

polkgigr1#

    • 如果不创建自定义内容,您无法更改占位符颜色。**但是,如果没有大量的XAML标记片段,也可以使用变通方法。

我想到的最简单的方法是创建一个派生自PasswordBox的自定义控件。你只需要覆盖OnRender
1.调用base.OnRender
1.检查密码框中是否没有文本,并且它没有焦点
1.创建一个FormattedText对象,可能像这样:

var placeholder = new FormattedText(
  PlaceholderText,
  CultureInfo.CurrentCulture,
  FlowDirection.LeftToRight,
  new Typeface(FontFamily, FontStyle, FontWeight, FontStretch),
  FontSize,
  new SolidColorBrush(Color.Blue),  // Or whatever you want
  VisualTreeHelper.GetDpi(this).PixelsPerDip);

1.将其绘制在内容的左上角:

drawingContext.DrawText(placeholder, new Point(Padding.Left, Padding.Top));

如果你不想要任何额外的代码,我知道的唯一方法是使用第三方库,例如。MahApps.Metro
您还可以为内置的PasswordBox创建自定义行为,尽管它并不比自定义控件简单多少。

相关问题