首页 > 解决方案 > 为什么设计时数据上下文属性不会传播到用户控件?

问题描述

我有一个控件,我为其设置了设计时上下文:

<UserControl x:Class="My.Namespace.OuterControl"
             xmlns:local="My.Namespace"
             d:DataContext="{d:DesignInstance Type=local:Sample, IsDesignTimeCreatable=True}">
    <StackPanel>
        <!-- This is the version that actually matters -->
        <local:InnerControl Title="{Binding OuterTitle}"/>

        <!-- Alternate versions for comparison purposes -->
        <local:InnerControl Title="Sample Title 2"/>
        <local:InnerControl Title="{Binding OuterTitle}" d:Title="Sample Title 3"/>
        <TextBlock Text="{Binding OuterTitle}"/>
    </StackPanel>
</UserControl>

显然,这已经删除了大部分细节和不重要的属性。重要的是上下文类型有一些属性,我们称之为OuterTitle,而内部控件有一个依赖属性,我称之为Title

问题是:第一个实例InnerControl.Title在设计时没有绑定,这是我实际需要使用的公式。其他的用于比较目的。没有错误,也没有任何迹象表明它为什么不起作用,它只是表现得好像绑定根本不存在。

我认为这应该起作用的原因是:

InnerControl本身使用数据绑定来显示值Title- 但是,我已经确认这不是原因,因为如果我将属性的实现更改为使用代码隐藏,我会得到相同的结果。这表明InnerControl实际上从未真正收到正确的值,尽管事实上相同的表达式在 a 中有效TextBlock

有谁知道这里的神奇成分是什么导致第一个InnerControl.Title没有出现在设计器中?是否有解决方法?

PS请理解这是一个缩小的例子来澄清问题。实际实例显然要复杂得多,因此“d:Title为每个InnerControl人指定”的建议不会有帮助,因为这个问题会影响整个设计器树。

标签: .netwpfxaml

解决方案


推荐阅读