类型';UserControl';不支持直接内容

本文关键字:UserControl 类型 不支持 | 更新日期: 2023-09-27 18:25:35

我有一个Outlook 2013和2016 VSTO外接程序项目,正试图将WPF用户控件添加到自定义任务窗格中,如下所述。

我遇到的问题是,当我添加用户控件(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>

有人能给我指正确的方向吗?

更新

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

类型';UserControl';不支持直接内容

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

在清除解决方案后,将System.XamlUIAutomationProvider引用添加到您的项目中,然后再次构建

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

在VS2017(15.3.5)中,如果正在编辑的UserControl的基本UserControl/Window在同一个库.exe中,则会出现此问题。启动VS后,它会正常运行几分钟,然后背景中的某个东西会打嗝,整个XAML文件都是蓝色的波浪形。编译后,它就消失了,开始打字,它马上就回来了。Intellisense仍然有效,但它使XAML编辑器几乎不可用。

修复它的唯一方法是将基类移到另一个库中。

只需删除System.Xaml,然后再次添加。

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

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

虽然缺失引用是一种解决方案,但我发现它也可能是需要解决引用中的类歧义的情况。

对我来说,这个问题是由一个外部库引起的,该库在System.Windows.Markup命名空间中定义了自己的ContentPropertyAttribute,这导致内容属性完全失败。删除引用可以解决问题,但如果不能这样做,则必须在引用的属性中设置命名空间别名。

因此,似乎编码工作已经在一夜之间完成,因为现在似乎可以完美地工作,而我没有更改任何内容,非常奇怪,但至少我现在可以继续了!

除了添加已经指出的引用,我还必须关闭并重新打开解决方案。如果这样也不能解决问题,请重新启动Visual Studio。

VS2019中的其他帮助:

要添加引用,请转到菜单"项目">"添加项目引用…">项目>浏览。。

System.Xaml引用可以在.Net框架文件夹中找到。前任。C: ''Windows''Microsoft.NET''Framework64''v4.0.30119''System.Xaml.dll

并且需要重新启动VS。