【问题标题】:The type 'Window' does not support direct content“窗口”类型不支持直接内容
【发布时间】:2015-11-19 13:25:52
【问题描述】:

我有一个由多个项目组成的 VS 2015 构建的 WPF 解决方案。突然,我开始在设计模式下收到一条警告,说明如下:

“窗口”类型不支持直接内容。

我了解某些控件不支持直接内容,但 System.Windows.Window 应该。我收到了与UserControl 相同的警告,据我所知,任何其他通常支持直接内容的控件。

一切都编译并运行良好,但是在我的所有 XAML 中都有蓝色下划线很麻烦。有没有其他人遇到过这个?

下面是截图:

【问题讨论】:

  • 尝试干净,然后全部重建。
  • @user2946329 - 使用图像而不是文本的原因是为了证明蓝色下划线在我的 XAML 代码中猖獗。
  • 您找到解决此问题的方法了吗?
  • 像你一样,我刚开始遇到这个问题。重新启动 Visual Studio 似乎让它消失了。试图弄清楚是什么触发了它开始发生......非常烦人和令人沮丧的问题。
  • 如果您在类库项目中添加了窗口并且没有 system.xaml 引用,也会发生这种情况。

标签: wpf xaml visual-studio-2015


【解决方案1】:

确保引用 System.Xaml。清理并重建项目。适用于 VS 2015 更新 1。

【讨论】:

  • 这是我的解决方案(从 TFS 获取最新信息后)。我不知道为什么那个参考文献不见了!
  • 别忘了清理。我没有先清理它,然后它就不起作用了。
  • +1。 PS:如果您收到诸如“'Binding' 不是从 MarkupExtension 派生”或“x:Type 在命名空间中不存在...”之类的错误消息,删除并重新添加对 PresentationCore、PresentationFramework 和 WindowsBase 的引用似乎会有所帮助。
【解决方案2】:

至少在 WPF IronPython 项目中,将 System.Xaml 引用添加到项目中解决了我的问题:

这里要注意的重要一点是,添加看似任何 的引用将使问题暂时消失——直到重新启动 Visual Studio。另一方面,System.Xaml 似乎解决了这个问题。我什至尝试删除该引用,然后在重新启动 Visual Studio 后问题再次出现。

【讨论】:

  • 感谢这帮了大忙!
  • @MeerDeen cmets 中的一些人说 Clean and Rebuild 为他们解决了这个问题。我可能还建议删除并重新添加此参考。
  • 您应该考虑关闭并重新打开解决方案。如果连这都不能解决,请重新启动 Visual Studio。
【解决方案3】:

对我来说,发生此错误是因为我将 WPF 窗口添加到类库项目中。

出于某种原因(我不知道),Visual Studio 没有让我们选择从“添加新项目...”中选择 WPF 窗口 模板" 如果项目未创建为 WPF 应用程序,则会出现对话框。相反,它只提供添加 WPF 用户控件 的选项。因此,我为新项目选择了 User Control 模板,然后编辑源代码以使 XAML 成为 Window 对象而不是 用户控制

<!-- The new item was created as an UserControl, but what I needed was a Window object. -->
<UserControl>
   ...
</UserControl>

<!-- Changed it to Window and made other necessary adjustments. -->
<Window>
   ...
</Window>

问题实际上出在代码隐藏中。由于它是作为 UserControl 创建的,因此窗口部分类继承自 UserControl,如下所示:

public partial class MyWindow : UserControl
{
    public MyWindow ()
    {
        InitializeComponent();
    }
}

要修复它,我只需要删除继承,使我的窗口类从无到有继承,如下所示:

public partial class MyWindow
{
    public MyWindow ()
    {
        InitializeComponent();
    }
}

删除继承后,Visual Studio 没有显示错误“'Window' 类型不支持直接内容。”没有了。

【讨论】:

  • 你可以(和我一样)编辑 *.vstemplate:&lt;ShowByDefault&gt;true&lt;/ShowByDefault&gt; 运行 devenv.exe /installvstemplates,我相信这会清除缓存的模板...重新启动 VS et viola :)
【解决方案4】:

我代表@mark Richman 编辑了Itemtemplate 以自动引用“System.Xaml”。 以防万一有人感兴趣:

可以在以下位置找到:“[VS InstallDir]\Common7\IDE\ItemTemplates\VisualBasic\WPF\[InputLocale]\WPFWindow”

BR, 丹尼尔

【讨论】:

    【解决方案5】:

    添加 System.XamlUIAutomationProvider 对您的项目的引用,在明确解决方案之后,然后再次构建

    【讨论】:

      【解决方案6】:

      在 Visual Studio 2019 中: 我搜索( System.Xaml.dll ) 我将其添加为参考 它运作良好

      在这个位置找到它: " C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.8 "

      【讨论】:

        猜你喜欢
        • 2016-03-08
        • 2014-06-01
        • 1970-01-01
        • 2020-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        相关资源
        最近更新 更多