如何将水印和自定义属性分配给TextBox的Text属性? (MahApps)

时间:2014-04-18 07:29:40

标签: c# wpf watermark attached-properties mahapps.metro

我在TextBox中创建合适的水印时遇到问题。

我在我的项目中使用MahApps,只要我不绑定文本'我的自定义属性,一切正常。

但我需要跟踪TextBox中的更改,因此我将Text属性绑定为:

<TextBox controls:TextboxHelper.Watermark="Enter text here..." Text="{Binding Path=MyProperty}" />

在这种情况下,水印属性停止工作,当我开始输入时水印文本不会消失。

如何帮助? 谢谢!

更新以下是har07制作的示例窗口。 在较低的未绑定TextBox中,水印按预期工作。但是,当我尝试在第一个TextBox中输入smth时,水印仍然存在。 enter image description here

UPDATE2 万一有人会犯同样的错误 - 似乎我确实在初始化窗口时在代码中设置了我的属性,这就是水印不起作用的原因。现在,多亏了har07,一切都很好。

1 个答案:

答案 0 :(得分:2)

正如我在评论中所说,设置水印以及Text绑定应该没有任何问题。我使用2个文本框进行了简单的测试,其中一个文本框绑定了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);
        }
    }
}

Download test project