【发布时间】:2014-10-31 04:40:20
【问题描述】:
<UserControl x:Class="WatermarkTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="30"
d:DesignWidth="250">
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>
<Border>
<Grid x:Name="grid">
<TextBlock Text="{Binding Watermark, FallbackValue=This prompt dissappears as you type...}"
Visibility="{Binding ElementName=txtUserEntry, Path=Text.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}" />
<TextBox Name="txtUserEntry"
Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Border>
</UserControl>
上面的代码显示了我的WatermarkTextBox 控件。在文件后面的代码中,我设置了DataContext。我省略了控件的 DP 的所有代码。
public WatermarkTextBox()
{
InitializeComponent();
grid.DataContext = this;
}
我必须将DataContext 绑定到网格,否则水印和实际文本的Text 属性将不会显示。现在的问题是我不能在Grid之外设置Border的Background。
我尝试了下面的代码,但只设置了Border 的Background,而不是水印和实际文本。
public WatermarkTextBox()
{
InitializeComponent();
this.DataContext = this;
grid.DataContext = this;
}
【问题讨论】:
标签: wpf binding datacontext