The type 'UserControl' does not support direct content

C#WpfXamlUser ControlsOutlook Addin

C# Problem Overview


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.

C# Solutions


Solution 1 - C#

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.

Solution 2 - C#

Add System.Xaml and UIAutomationProvider references to your project, after that clear solution and then build again

Solution 3 - C#

Add System.Xaml and UIAutomationProvider references, and then restart Visual Studio solve the problems.

Solution 4 - C#

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.

Solution 5 - C#

Just remove System.Xaml, then add it again.

Solution 6 - C#

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;
    }
    ...
}

Solution 7 - C#

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.

Solution 8 - C#

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!

Solution 9 - C#

Beside adding already pointed out references, I had to close and reopen solution. If even this does not solve it, restart Visual Studio.

Solution 10 - C#

Additional help in VS2019:

To add reference go to menu Project > Add Project Reference... > Projects > Browse..

The System.Xaml reference can be found in the .Net framework folder. ex. C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Xaml.dll

and restarting VS required.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNAJView Question on Stackoverflow
Solution 1 - C#alicanerdoganView Answer on Stackoverflow
Solution 2 - C#paulgaiView Answer on Stackoverflow
Solution 3 - C#SLdragonView Answer on Stackoverflow
Solution 4 - C#avenmoreView Answer on Stackoverflow
Solution 5 - C#Ahmed AlayatView Answer on Stackoverflow
Solution 6 - C#Monika MateevaView Answer on Stackoverflow
Solution 7 - C#Jason LimView Answer on Stackoverflow
Solution 8 - C#NAJView Answer on Stackoverflow
Solution 9 - C#Julio NobreView Answer on Stackoverflow
Solution 10 - C#trydentView Answer on Stackoverflow