我有一个用户控件,里面包含带有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“文本块,并将其DataContext设置为与我的UserControl DataContext相同,以便从我的ViewModel中更改RunTime中的水印文本。
我试图将带有RelativeSource的"MainCategoryTextBlock“DataContext绑定到我的UserControl DataContext上,但没有成功(可能是语法错误-我不确定)。
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 你知道我该怎么解决这个问题吗?
谢谢
发布于 2013-03-04 04:44:40
您应该将窗口的data context属性设置为视图模型,并将textblock的text属性绑定到视图模型属性。
<TextBlock Text={Binding Path=PropertyOnViewModel} />发布于 2013-03-04 09:26:43
如果你的UserControl有一个名字,你可以这样做:
DataContext={Binding ElementName="YourUserControlName", Path=DataContext}但是我可以看到您正在装饰器装饰器中使用您的textbox,所以在这种情况下您不能使用FindAncestor,因为您的textbox和您的UserControl不属于同一个可视化树。
https://stackoverflow.com/questions/15190472
复制相似问题