Avalonia 中实现 TextBox 水印最简单可靠的方式是使用内置 Watermark 属性,支持字符串、TextBlock 或任意控件,自动管理显示/隐藏逻辑,无需自定义模板或手动绑定。

在 Avalonia 中实现带水印(Placeholder)的 TextBox,最简单可靠的方式是使用内置的 Watermark 属性 —— 它专为此场景设计,无需自定义控件或模板。
直接使用 Watermark 属性
Avalonia 的 TextBox 原生支持 Watermark 属性,会在文本为空且未获得焦点时显示提示文字,获得焦点或输入内容后自动隐藏,行为符合主流 UI 习惯。
- 支持字符串、
TextBlock或任意控件(如带图标+文字的组合) - 样式可全局或局部定制(例如颜色、字体大小),默认使用
ThemeAccentBrush的淡色变体 - 无需绑定、触发器或代码逻辑,开箱即用
示例 XAML:
自定义水印样式(可选)
若需调整水印颜色、字体或动画效果,可通过 TextBox.WatermarkTemplate 或重写主题资源。常用方式是覆盖 TextBox.WatermarkForeground 资源:
注意与 WPF/UWP 的区别
Avalonia 的 Watermark 不是附加属性,而是 TextBox 的直系依赖属性;它不依赖 IsFocused 或 Text.Length 手动控制,内部已封装状态逻辑。避免以下常见误区:
- 不要用
Visibility绑定模拟水印(破坏原生交互和可访问性) - 不要监听
GotFocus/LostFocus手动切换(干扰默认行为) -
Watermark内容不会被提交到Text属性,也不参与数据验证
多语言与绑定支持
Watermark 支持绑定和资源引用,适合本地化场景:
确保绑定源实现 INotifyPropertyChanged,资源字典按文化正确加载即可。










