C# 如何将水印和自定义属性分配给文本框';s文本属性?(马哈普斯)
我在文本框中创建合适的水印时遇到问题 我在我的项目中使用MahApps,只要我不将“文本”绑定到我的自定义属性,所有这些都可以正常工作 但是我需要跟踪TextBox中的更改,因此我像这样绑定Text属性:C# 如何将水印和自定义属性分配给文本框';s文本属性?(马哈普斯),c#,wpf,watermark,attached-properties,mahapps.metro,C#,Wpf,Watermark,Attached Properties,Mahapps.metro,我在文本框中创建合适的水印时遇到问题 我在我的项目中使用MahApps,只要我不将“文本”绑定到我的自定义属性,所有这些都可以正常工作 但是我需要跟踪TextBox中的更改,因此我像这样绑定Text属性: <TextBox controls:TextboxHelper.Watermark="Enter text here..." Text="{Binding Path=MyProperty}" /> 在这种情况下,水印属性停止工作,水印文本在我开始键入时不会消失 如何帮助它?
<TextBox controls:TextboxHelper.Watermark="Enter text here..." Text="{Binding Path=MyProperty}" />
在这种情况下,水印属性停止工作,水印文本在我开始键入时不会消失
如何帮助它?
谢谢
更新这是由制作的示例窗口。
在下部未绑定文本框中,水印按预期工作。但是,当我尝试在第一个文本框中键入smth时,水印仍然存在。
更新2以防有人会犯同样的错误-似乎我在初始化窗口时确实在代码中设置了属性,这就是水印不起作用的原因。现在,多亏了har07,一切都好了。正如我在评论中所说,设置水印和
文本绑定应该不会有任何问题。我使用两个文本框进行了简单的测试,一个绑定了Text
属性,另一个未绑定。两者都显示相同的行为:水印文本被键入的文本替换,文本框失去焦点时变暗
//查看
//模型(我正在使用MvvmLight实现INPC)
公共类人物:ObservieObject
{
私有字符串_name=“默认名称”;
公共字符串名
{
获取{return\u name;}
设置
{
_名称=值;
RaisePropertyChanged(()=>名称);
}
}
}
设置水印和文本
绑定应该不会有任何问题。对我来说效果很好,文本框上的水印文本变暗focus@har07谢谢你的回复!你能发布你的代码示例吗?奇怪的是,它对我不起作用,可能是一些bug..发布了示例代码,带有下载示例项目(VS 2012)的链接@har07非常感谢您花时间上传该项目!然而,这与我的预期不符。我制作了一个打印屏幕并添加到我的问题中,从中可以看出,我无法在绑定的文本框中键入文本,水印不会消失。好的,“默认名称”文本是来自text
属性,而不是水印。删除绑定文本框中的所有文本,然后您将看到水印>将焦点移动到未绑定文本框,然后绑定文本框中的水印将变暗。这不是预期的行为吗?非常感谢您花时间上传项目!然而,这与我的预期不符。我制作了一个打印屏幕并添加到我的问题中,从中可以看出,我无法在绑定的文本框中键入文本,水印不会消失。
//View
<Controls:MetroWindow x:Class="WpfMahApps.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:local="clr-namespace:WpfMahApps"
Title="StackOverflow" Height="500" Width="625"
WindowStartupLocation="CenterScreen">
<Grid>
<Grid.DataContext>
<local:Person/>
</Grid.DataContext>
<StackPanel>
<TextBox Text="{Binding Name}" Controls:TextboxHelper.Watermark="Enter text here...."/>
<TextBox Controls:TextboxHelper.Watermark="Enter text here too...."/>
</StackPanel>
</Grid>
</Controls:MetroWindow>
//Model (I'm using MvvmLight for implementation of INPC)
public class Person : ObservableObject
{
private string _name = "Default Name";
public String Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged(() => Name);
}
}
}