WPF:UserControl 在设计时未在 ContentControl 的 Datatemplate 中显示

WPF: UserControl not displaying at design time inside Datatemplate for a ContentControl

我花了很多天时间试图弄清楚这里有什么问题,我怀疑这是 VS 中的一个错误或者我监督的一些简单的东西...

我有一个 ContentControl 服务于视图模型:

<!-- Learning control from DataTemplate -->
<ContentControl Content     = "{Binding learningViewModel}"
                Grid.Row    = "1"
                Grid.Column = "1"
                Height      = "300"
                Margin      = "20, 0, 0, 0"/>

它所绑定的属性实际上是一组视图模型的接口。

然后我对可能的 ViewModels:

定义了 DataTemplate
<Window.Resources>

    <DataTemplate DataType="{x:Type vm:vmLearnSpeak}">
        <local:viewLearnSpeak CommandNotKnown           = "{Binding DataContext.cmdNotKnown,                RelativeSource={RelativeSource AncestorType=local:wndSession}}"
                              CommandAlmostKnown        = "{Binding DataContext.cmdAlmostKnown,             RelativeSource={RelativeSource AncestorType=local:wndSession}}"
                              CommandKnown              = "{Binding DataContext.cmdKnown,                   RelativeSource={RelativeSource AncestorType=local:wndSession}}" />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:vmLearnWrite}">
        <local:viewLearnWrite CommandNotKnown           = "{Binding DataContext.cmdNotKnown,                RelativeSource={RelativeSource AncestorType=local:wndSession}}"
                              CommandAlmostKnown        = "{Binding DataContext.cmdAlmostKnown,             RelativeSource={RelativeSource AncestorType=local:wndSession}}"
                              CommandKnown              = "{Binding DataContext.cmdKnown,                   RelativeSource={RelativeSource AncestorType=local:wndSession}}" />
    </DataTemplate>
    <DataTemplate DataType="{x:Type vm:vmLearnListen}">
        <local:viewLearnListen CommandNotKnown          = "{Binding DataContext.cmdNotKnown,                RelativeSource={RelativeSource AncestorType=local:wndSession}}"
                               CommandAlmostKnown       = "{Binding DataContext.cmdAlmostKnown,             RelativeSource={RelativeSource AncestorType=local:wndSession}}"
                               CommandKnown             = "{Binding DataContext.cmdKnown,                   RelativeSource={RelativeSource AncestorType=local:wndSession}}" />
    </DataTemplate>

</Window.Resources>

在程序执行期间,绑定按预期工作。

然而在设计时,ContentControl 将只显示表示视图模型路径的纯字符串(例如“MyApp.ViewModels.vmLearnSpeak”)。

所有视图模型都有初始化一些虚拟数据的默认构造函数,如果我更改 ViewModel 中的虚拟初始化,属性 绑定到 ContentControl,那么设计器中的 DataTemplate 也按预期进行了更改(例如,字符串更改为“MyApp.ViewModels.vmLearnWrite”)。

如果我用按钮之类的另一个控件替换 DataTemplate 内容,如果设置了带有按钮的 DataTemplate 的相应 Data,我就会显示按钮。

所以总的来说,DataTemplate 基本上是有效的。

自定义控件也可以工作:如果我将 DataTemplate 中的代码直接放在布局中,则控件会按预期显示。

因此,如果将控件放置在 DataTemplate...

中,似乎只有在设计时控件才会显示失败

希望我提供了足够的信息,否则请告诉我...在此先感谢您的支持!

顺便说一句:运行 Visual Studio 2016 社区,以防万一可能存在已知错误(在花了这么多时间尝试修复之后我不确定,但我相信它曾经有效前段时间...)

编辑:

问题确实出在 UserControl,如果我添加一个简单的空白按钮或仅使用一个按钮 UserControl,也会出现同样的问题。但是,如果我放 CustomControl 或常规 Button,则会显示 DataTemplate...

仅供参考:显然这是 Visual studio 中的一个错误,已修复,但我不确定它何时会发布:

https://developercommunity.visualstudio.com/content/problem/1004742/usercontrol-is-not-displayed-inside-datatemplate-i.html