Wpf 数据上下文冲突
我必须将Wpf 数据上下文冲突,wpf,binding,datacontext,Wpf,Binding,Datacontext,我必须将DataContext绑定到网格,否则水印和实际文本的Text属性都不会显示。现在的问题是,我无法将边框的背景设置在网格之外 我尝试了下面的代码,但是只设置了边框的背景,没有设置水印和实际文本 public WatermarkTextBox() { InitializeComponent(); grid.DataContext = this; } 在这样的UserControl中,您不应该将DataContext默认设置为this或其他任何内容,因为当您在应用程序中的某
DataContext
绑定到网格,否则水印和实际文本的Text
属性都不会显示。现在的问题是,我无法将边框的背景设置在网格
之外
我尝试了下面的代码,但是只设置了边框的背景
,没有设置水印和实际文本
public WatermarkTextBox()
{
InitializeComponent();
grid.DataContext = this;
}
在这样的UserControl中,您不应该将DataContext默认设置为this
或其他任何内容,因为当您在应用程序中的某个位置使用UserControl时,DataContext通常是在外部设置的。外部应用的DataContext通常是应用程序视图模型的一部分
您应该更改内部绑定,以便它们使用显式的相对资源
:
public WatermarkTextBox()
{
InitializeComponent();
this.DataContext = this;
grid.DataContext = this;
}
然后从UserControl的构造函数中删除任何DataContext分配
请参阅详细讨论此主题的示例(以及许多其他类似示例)。感谢您提供解决方案和附加信息链接。
public WatermarkTextBox()
{
InitializeComponent();
this.DataContext = this;
grid.DataContext = this;
}
<TextBlock
Text="{Binding Path=Watermark,
RelativeSource={RelativeSource AncestorType=UserControl},
FallbackValue=This prompt dissappears as you type...}"
Visibility="{Binding ElementName=txtUserEntry,
Path=Text.IsEmpty,
Converter={StaticResource BooleanToVisibilityConverter}}" />
<TextBox
Name="txtUserEntry"
Text="{Binding Path=Text,
UpdateSourceTrigger=PropertyChanged,
RelativeSource={RelativeSource AncestorType=UserControl}}" />