2012-06-27 11 views
7

Creo que me falta algo que debería ser obvio aquí, pero me estoy quedando en blanco en este.Cómo agregar UserControl a un Panel en una Ventana de WPF

he construido un control de usuario muy primitiva que contiene nada más que un TextBox para su uso como una ventana de registro:

<UserControl x:Class="My.LoggerControl" 
      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" 
      x:Name="LoggerView"> 
    <Grid x:Name="LayoutRoot"> 
     <TextBox x:Name="LogWindow" AcceptsReturn="True"/> 
    </Grid> 
</UserControl> 

no espero que para ser la mejor manera de hacerlo, pero debe ser lo suficientemente bueno para un prototipo.

El código subyacente es igualmente simple:

public partial class LoggerControl : UserControl, ILogger 
{ 
    public LoggerControl() 
    { 
     InitializeComponent(); 
    } 

    private LogLevel level = LogLevel.Warning; 

    #region ILogger 

    public LogLevel Level 
    { 
     get { return level; } 
     set { level = value; } 
    } 

    public void OnError(string s) 
    { 
     if (level >= LogLevel.Error) 
      LogWindow.AppendText("ERROR:::" + s + "\n"); 
    } 

    // ... 
    #endregion 
} 

Lo que no puedo entender es cómo añadir este control para mi MainWindow.xaml. Simplificando, digamos que mi ventana se ve así:

<Window x:Class="My.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:My" 
    Title="Test" Height="350" Width="525"> 
    <Grid> 
     <local:LoggerControl x:Name="LogView" /> 
    </Grid> 
</Window> 

Incluso con algo tan simple, el diseñador en Visual Studio 2010 no puede cargar la ventana principal. El error dado es:

No se puede agregar un valor de tipo 'LoggerControl' a un diccionario collectionor o de tipo 'UIElementCollection'.

Este mensaje de error tiene solo un impacto no relacionado en los principales buscadores (más duplicados) por lo que no he encontrado ninguna ayuda útil. La propia documentación de Microsoft parece implicar que esto debería funcionar.

¿Alguna idea de cómo solucionar esto?

+0

Por extraño que parezca, cuando construyo una aplicación de prueba mínima no tengo este problema. Que podria causar esto? – IanGilham

Respuesta

3
<UserControl x:Class="My.LoggerControl" 


xmlns:local="clr-namespace:My.LogTest" 

Parece que puede haber cometido un error en el espacio de nombres? LoggerControl aparece como el espacio de nombres Mi, mientras está importando My.LogTest y asignándolo al local de prefijo xml. Cambie esto a:

xmlns:local="clr-namespace:My" 

Y creo que debería funcionar. De lo contrario, arregle la declaración de LoggerControl.

+0

Bien manchado. Sin embargo, fue un error en la forma en que copié el código y eliminé las referencias a mi empleador. Los espacios de nombres que estoy usando son correctos. – IanGilham

Cuestiones relacionadas