首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改控件内特定属性的DataContext - WPF

更改控件内特定属性的DataContext - WPF
EN

Stack Overflow用户
提问于 2013-03-04 04:28:54
回答 2查看 2.7K关注 0票数 0

我有一个用户控件,里面包含带有WaterMark的TextBox

代码语言:javascript
复制
<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上,但没有成功(可能是语法错误-我不确定)。

代码语言:javascript
复制
DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 

你知道我该怎么解决这个问题吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-03-04 04:44:40

您应该将窗口的data context属性设置为视图模型,并将textblock的text属性绑定到视图模型属性。

代码语言:javascript
复制
<TextBlock Text={Binding Path=PropertyOnViewModel} />
票数 0
EN

Stack Overflow用户

发布于 2013-03-04 09:26:43

如果你的UserControl有一个名字,你可以这样做:

代码语言:javascript
复制
DataContext={Binding ElementName="YourUserControlName", Path=DataContext}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15190472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档