2012-06-27 12 views
7

Myślę, że brakuje mi czegoś, co powinno być oczywiste, ale na tym rysunku rysuję pustkę.Jak dodać UserControl do panelu na oknie WPF

I został zbudowany bardzo prymitywny UserControl zawierający nic więcej niż TextBox do wykorzystania jako okno dziennika:

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

Nie oczekuję, że aby być najlepszym sposobem, aby to zrobić, ale powinien być wystarczająco dobrym na prototyp.

opóźnieniem kodu jest równie prosta:

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 
} 

Rzecz nie mogę dowiedzieć się, jak dodać tej kontroli do mojego MainWindow.xaml. Upraszczając, powiedzmy, że moje okno wygląda następująco:

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

Nawet z czymś tak prostym, Designer in Visual Studio 2010 nie może wczytać głównego okna. Podany błąd to:

Wartości typu "LoggerControl" nie można dodać do słownika kolekcjonerskiego typu "UIElementCollection".

Ten komunikat o błędzie zawiera tylko jedno niepowiązane trafienie w głównych wyszukiwarkach (plus duplikaty), więc nie znalazłem żadnej przydatnej pomocy. Dokumentacja Microsoftu wydaje się sugerować, że to powinno działać.

Każdy pomysł, jak rozwiązać ten problem?

+0

Co dziwne, gdy buduję minimalną aplikację testową, nie mam tego problemu. Co może spowodować to? – IanGilham

Odpowiedz

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


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

Wygląda na to, że w przestrzeni nazw popełniono błąd. LoggerControl jest wymieniony jako obszar nazw My, podczas importowania My.LogTest i przypisywania go do lokalnego prefiksu xml. Zmień to na:

xmlns:local="clr-namespace:My" 

Myślę, że to powinno zadziałać. W przeciwnym razie należy naprawić deklarację LoggerControl.

+0

Dobrze zauważył. To był błąd w kopiowaniu kodu i usunięciu odniesień do mojego pracodawcy. Przestrzenie nazw, których używam, są poprawne. – IanGilham

Powiązane problemy