问题
I have an Outlook 2013 and 2016 VSTO Add-in project and am trying to add a WPF user control to a custom task pane as described here.
The problem I have is when I add the User Control (WPF) it generates me a WPF control with a grid, but automatically throws an error of "The type 'UserControl' does not support direct content".
WPF generated:
<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>
I know in the past I have had to add the WPF project type guid to the .proj file to get some things to work, but adding this made no difference (in fact it would not even load when in a certain order).
Original:
<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Crashes:
<ProjectTypeGuids>{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Doesn't crash, but doesn't fix the error:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{BAA0C2D2-18E2-41B9-852F-F413020CAA33};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
Can anyone point me in the right direction?
UPDATE
I tried creating a new class library project straight out of the box, added a WPF user control, then added the reference to System.Xaml and I have the same issue.
回答1:
For anyone who having this problem on Visual Studio 2015, try to add (if it's not already added) System.Xaml
reference to your project. Visual Studio simply fails to show reference error.
回答2:
Add System.Xaml
and UIAutomationProvider
references to your project, after that clear solution and then build again
回答3:
Add System.Xaml
and UIAutomationProvider
references, and then restart Visual Studio solve the problems.
回答4:
Just remove System.Xaml
, then add it again.
回答5:
In VS2017 (15.3.5) this problem occurs if the base UserControl/Window of the UserControl your are editing is in the same library/exe. After starting VS it is fine for a few minutes, then something in the background hiccoughs and the entire XAML file is blue-squiggled. Compile and it goes away, start typing and it's instantly back. Intellisense still works, but it makes the XAML editor almost unusable.
The only way to fix it is to move base classes into another library.
回答6:
Try with exposing new Content property like the example and use ContentPropertyAttribute to the class. For me that helped. I had the problem in VS 2017.
[ContentProperty( "Content" )]
public class MyUserControl: UserControl
{
public new Object Content
{
get => base.Content;
set => base.Content = value;
}
...
}
回答7:
So it seems the coding faries have been in overnight as this now seems to work perfectly without me having changed anything, very odd, but at least I can carry on now!
回答8:
Beside adding already pointed out references, I had to close and reopen solution. If even this does not solve it, restart Visual Studio.
回答9:
While missing references have been mentioned as a solution, I discovered that it can also be a case of needing to resolve class ambiguities in your references.
For me, the issue was caused by an external library that had defined its own ContentPropertyAttribute
in the System.Windows.Markup
namespace which was causing content attributes to fail completely. Removing the reference will fix the issue, but if that is not an option, then you will have to set up a namespace alias in the reference's properties instead.
来源:https://stackoverflow.com/questions/34070333/the-type-usercontrol-does-not-support-direct-content