“UserControl”类型不支持直接内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“UserControl”类型不支持直接内容相关的知识,希望对你有一定的参考价值。

我有一个Outlook 2013和2016 VSTO加载项项目,我正在尝试将WPF用户控件添加到自定义任务窗格,如here所述。

我遇到的问题是,当我添加用户控件(WPF)时,它会生成一个带网格的WPF控件,但会自动抛出“类型'UserControl'不支持直接内容”的错误。

WPF生成:

<UserControl x:Class="TestNamespace.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:TestNamespace"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>

</Grid>
</UserControl>

我知道在过去我不得不将WPF项目类型guid添加到.proj文件中以使一些工作正常工作,但添加它没有任何区别(实际上它甚至不会在按特定顺序加载时)。

原版的:

<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

崩溃:

<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

不崩溃,但不修复错误:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

谁能指出我正确的方向?

UPDATE

我尝试直接创建一个新的类库项目,添加了一个WPF用户控件,然后添加了对System.Xaml的引用,我有同样的问题。

答案

对于在Visual Studio 2015上遇到此问题的任何人,请尝试添加(如果尚未添加)System.Xaml对项目的引用。 Visual Studio根本无法显示引用错误。

另一答案

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

另一答案

添加System.XamlUIAutomationProvider引用,然后重启Visual Studio解决问题。

另一答案

只需删除System.Xaml,然后重新添加即可。

另一答案

在VS2017(15.3.5)中,如果您正在编辑的UserControl的基本UserControl / Window位于同一个库/ exe中,则会出现此问题。在启动VS之后,几分钟就可以了,然后在背景中出现问题并且整个XAML文件都是蓝色波浪状的。编译并消失,开始打字,它立即回来。 Intellisense仍然有效,但它使XAML编辑器几乎无法使用。

解决它的唯一方法是将基类移动到另一个库中。

另一答案

尝试公开新的Content属性,如示例,并使用ContentPropertyAttribute到类。对我来说有帮助。我在VS 2017遇到了这个问题。

[ContentProperty( "Content" )]
public class MyUserControl: UserControl
{
    public new Object Content
    {
        get => base.Content;
        set => base.Content = value;
    }
    ...
}
另一答案

所以看起来编码精灵已经在一夜之间,因为现在这似乎工作完美而没有我改变任何东西,非常奇怪,但至少我现在可以继续!

另一答案

除了添加已经指出的参考文献,我不得不关闭并重新打开解决方案。如果即使这样也无法解决问题,请重新启动Visual Studio。

另一答案

虽然已经提到缺少引用作为解决方案,但我发现它也可能是需要解决引用中的类歧义的情况。

对我来说,问题是由一个外部库引起的,该库在ContentPropertyAttribute命名空间中定义了自己的System.Windows.Markup,这导致内容属性完全失败。删除引用将解决问题,但如果这不是一个选项,那么您将不得不在引用的属性中设置namespace alias

以上是关于“UserControl”类型不支持直接内容的主要内容,如果未能解决你的问题,请参考以下文章

不支持在 UserControl 上设置 Template 属性

用vs2008写好的xaml不能在blend2中打开,提示wpf项目中不支持usercontrol 、不支持grid 、不支持textblock

windows presentation foundation (wpf) 不支持 UserControl/Grid...

iframe框架嵌入一个网页,在微信里面打开不显示内容,一片空白,在其他浏览器都正常,紧急求助,在线等!

如何从代码隐藏中访问UserControl中样式的Setter中ControlTemplate中定义的Control实例?

将UserControl绑定到ViewModel(Caliburn Micro WPF)