【问题标题】:TemplatedParent was not set to a child of UserControlTemplatedParent 未设置为 UserControl 的子级
【发布时间】:2014-01-07 16:07:25
【问题描述】:

在我的项目中,我有一个用户控件,其中包含两个子控件,例如一个文本框和一个按钮。通用样式是在 App.xaml 中为 Textbox 编写的。因此,当我尝试获取 TemplatedParent 它为空时,此样式将应用于该用户控件的文本框和 tat 文本框中。如何从文本框中获取用户控件,以便用户控件中的属性可以在文本框样式中获取。

【问题讨论】:

    标签: wpf xaml data-binding binding user-controls


    【解决方案1】:

    TemplatedParent 可以在ControlTemplate 中使用。

    对于样式,您需要使用RelativeSource,并将模式设置为FindAncestor,并将AncestorType 设置为UserControl。

    假设你想将Text从TextBox Style设置为Name of UserControl,你可以这样做:

    <Style TargetType="TextBox">
       <Setter Property="Text"
               Value="{Binding Path=Name,
                               RelativeSource={RelativeSource Mode=FindAncestor, 
                                                       AncestorType=UserControl}}"/>
    </Style>
    

    【讨论】:

    • 您的代码对于默认 userControl 的属性可以正常工作,但是对于我的自定义用户控件,它不起作用。 &lt;Style TargetType="TextBox"&gt; &lt;Setter Property="Text" Value="{Binding MyProperty, RelativeSource={RelativeSource AncestorType=local:UserControl1}}" /&gt; &lt;/Style&gt;
    • 不,它也适用。贴出相关代码。如果 UserControl 位于 TextBox 的父可视树中,它将起作用。
    • 根据可视化树,它可以工作,但不能工作。这就是问题所在。
    • 理想情况下应该如此。如果不是我怀疑你的代码有问题。请在此处发布。
    • 这里没有更多的代码要发布。我有一个名为 UserControl1 的 Usercontrol 和 MyProperty 是一个依赖属性,它位于字符串的 UserControltype 中。此属性将在上面发布的绑定中访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2011-03-23
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多