0

我有用户控件,其中包含带有 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

我想在里面取“MainCategoryTextBlock”文本块<controls:WatermarkService.Watermark>并将其 DataContext 设置为与我的 UserControl DataContext 相同,以便从我的 ViewModel 更改 RunTime 中的水印文本。

我尝试将“MainCategoryTextBlock”DataContext 与 RelativeSource 绑定到我的 UserControl DataContext 但我没有成功(可能是语法错误 - 我不确定)。

DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 

你有什么线索我该如何解决?

谢谢

4

2 回答 2

0

您应该将窗口的数据上下文属性设置为视图模型,并将文本块的文本属性绑定到视图模型属性。

<TextBlock Text={Binding Path=PropertyOnViewModel} />
于 2013-03-03T20:44:39.583 回答
0

如果您的 UserControl 有一个名称,那么您可以这样做:

DataContext={Binding ElementName="YourUserControlName", Path=DataContext}

但我可以看到你在装饰器中使用你的文本框,所以你不能FindAncestor在这种情况下使用,因为你的文本框和你的 UserControl 不属于同一个可视化树。

于 2013-03-04T01:26:43.407 回答