我有用户控件,其中包含带有WaterMark的TextBox
<AdornerDecorator>
<TextBox
Height="20"
Margin="10,0"
Grid.Column="0"
Text="{Binding MainCategoryTextBoxValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Name="MainCatTextBox">
<controls:WatermarkService.Watermark>
<TextBlock VerticalAlignment="Center" x:Name="MainCategoryTextBlock"> </TextBlock>
</controls:WatermarkService.Watermark>
</TextBox>
</AdornerDecorator>
您可以在此处看到WatermarkService实现 https://stackoverflow.com/a/836463/1548347
我想在<controls:WatermarkService.Watermark>
中取“MainCategoryTextBlock”文本块并将其设置为与我的UserControl DataContext相同,以便从我的ViewModel更改RunTime中的水印文本。
我尝试将“MainCategoryTextBlock”DataContext与RelativeSource绑定到我的UserControl DataContext但是我没有成功(可能是语法错误 - 我不确定)。
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"
你有什么线索我能解决吗?
由于
答案 0 :(得分:0)
您应该将窗口的数据上下文属性设置为视图模型,并将文本块的text属性绑定到视图模型属性。
<TextBlock Text={Binding Path=PropertyOnViewModel} />
答案 1 :(得分:0)
如果您的UserControl有一个名称,那么您可以这样做:
DataContext={Binding ElementName="YourUserControlName", Path=DataContext}
但是我可以看到您在装饰器装饰器中使用文本框,因此在这种情况下您不能使用FindAncestor
,因为您的文本框和UserControl不属于同一个可视树。