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}}" />