c# wpf xaml user-controls outlook-addin

c# - El tipo ''UserControl'' no admite contenido directo



wpf xaml (9)

Tengo un proyecto de complemento VSTO de Outlook 2013 y 2016 y estoy tratando de agregar un control de usuario WPF a un panel de tareas personalizado como se describe here .

El problema que tengo es que cuando agrego el Control de usuario (WPF), me genera un control WPF con una cuadrícula, pero automáticamente arroja un error de "El tipo ''UserControl'' no admite contenido directo".

WPF generado:

<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>

Sé que en el pasado tuve que agregar el guid de tipo de proyecto WPF al archivo .proj para que algunas cosas funcionen, pero agregar esto no hizo ninguna diferencia (de hecho, ni siquiera se cargaría en un cierto orden).

Original:

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

Choques

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

No se bloquea, pero no soluciona el error:

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

¿Alguien puede señalarme en la dirección correcta?

ACTUALIZAR

Intenté crear un nuevo proyecto de biblioteca de clases directamente, agregué un control de usuario WPF, luego agregué la referencia a System.Xaml y tengo el mismo problema.


Además de agregar referencias ya señaladas, tuve que cerrar y volver a abrir la solución. Si incluso esto no lo resuelve, reinicie Visual Studio.


Agregue referencias System.Xaml y UIAutomationProvider , y luego reinicie Visual Studio para resolver los problemas.


Agregue referencias System.Xaml y UIAutomationProvider a su proyecto, después de esa solución clara y luego vuelva a compilar


Así que parece que los faries de codificación han estado de la noche a la mañana ya que esto parece funcionar perfectamente sin que yo haya cambiado nada, muy extraño, ¡pero al menos puedo continuar ahora!


En VS2017 (15.3.5), este problema ocurre si el UserControl / Window base del UserControl que está editando está en la misma biblioteca / exe. Después de iniciar VS, está bien durante unos minutos, luego algo en el fondo tiene hipo y todo el archivo XAML está ondulado. Compila y desaparece, comienza a escribir y vuelve instantáneamente. Intellisense todavía funciona, pero hace que el editor XAML sea casi inutilizable.

La única forma de solucionarlo es mover las clases base a otra biblioteca.


Intente exponer una nueva propiedad de Contenido como el ejemplo y use ContentPropertyAttribute a la clase. Para mí eso ayudó. Tuve el problema en VS 2017.

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


Para cualquiera que tenga este problema en Visual Studio 2015, intente agregar (si aún no se ha agregado) referencia System.Xaml a su proyecto. Visual Studio simplemente no muestra el error de referencia.


Si bien las referencias faltantes se han mencionado como una solución, descubrí que también puede ser un caso de necesidad de resolver ambigüedades de clase en sus referencias.

Para mí, el problema fue causado por una biblioteca externa que había definido su propio ContentPropertyAttribute en el espacio de nombres System.Windows.Markup que causaba que los atributos de contenido fallaran por completo. Al eliminar la referencia se solucionará el problema, pero si esa no es una opción, deberá configurar un alias de espacio de nombres en las propiedades de la referencia.


Simplemente elimine System.Xaml , luego agréguelo nuevamente.