我有一个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>
有人能指出我正确的方向吗?
更新
我尝试直接创建一个新的类库项目,添加了一个WPF用户控件,然后添加了对System.Xaml的引用,我遇到了同样的问题。
答案 0 :(得分:155)
对于在Visual Studio 2015上遇到此问题的任何人,请尝试添加(如果尚未添加)System.Xaml
对项目的引用。 Visual Studio根本无法显示引用错误。
答案 1 :(得分:95)
在明确的解决方案之后添加 System.Xaml
和 UIAutomationProvider
对项目的引用,然后重新构建
答案 2 :(得分:17)
添加System.Xaml
和UIAutomationProvider
引用,然后重新启动Visual Studio 解决问题。
答案 3 :(得分:4)
在VS2017(15.3.5)中,如果您正在编辑的UserControl的基本UserControl / Window位于同一个库/ exe中,则会出现此问题。在启动VS之后,几分钟就可以了,然后在背景中出现问题并且整个XAML文件都是蓝色波浪状的。编译并消失,开始打字,它立即回来。智能感知仍然有效,但它使XAML编辑器几乎无法使用。
修复它的唯一方法是将基类移动到另一个库中。
答案 4 :(得分:3)
只需删除System.Xaml
,然后重新添加即可。
答案 5 :(得分:2)
尝试公开新的Content属性(如示例)并将ContentPropertyAttribute用于该类。对我来说有帮助。我在VS 2017中遇到了问题。
[ContentProperty( "Content" )]
public class MyUserControl: UserControl
{
public new Object Content
{
get => base.Content;
set => base.Content = value;
}
...
}
答案 6 :(得分:0)
所以看起来编码faries已经在一夜之间了,因为现在这似乎工作完美而没有我改变任何东西,非常奇怪,但至少我现在可以继续!
答案 7 :(得分:0)
除了添加已经指出的参考文献之外,我还必须关闭并重新打开解决方案。如果即使这样也无法解决问题,请重新启动Visual Studio。
答案 8 :(得分:0)
虽然提到了缺少参考作为解决方案,但我发现这也可能是需要解决参考中的类歧义的情况。
对我来说,此问题是由外部库引起的,该外部库在ContentPropertyAttribute
命名空间中定义了自己的System.Windows.Markup
,这导致内容属性完全失败。删除引用将解决此问题,但是如果不是这样,则必须在引用的属性中设置namespace alias。
答案 9 :(得分:0)
VS2019中的其他帮助:
要添加参考,请进入菜单>项目>添加项目参考...>项目>浏览。
可以在.Net framework文件夹中找到System.Xaml参考。 例如 C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ System.Xaml.dll
并需要重新启动VS。