2012-06-27 39 views
7

我想我錯過了一些在這裏應該很明顯的東西,但我在這一張上留下了一個空白。如何將用戶控件添加到WPF窗口上的面板上

我已經建立了包含無非TextBox多爲日誌窗口中使用的一種非常原始的用戶控件:

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

我不指望要做到這一點的最好辦法,但它應該對原型來說足夠好。

的代碼背後,是同樣簡單:

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 
} 

我想不通的事情是如何將此控件添加到我的MainWindow.xaml。簡化,可以說我的窗戶是這樣的:

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

即使有這麼簡單的東西,在Visual Studio 2010設計器無法加載主窗口。給出的錯誤是:

'LoggerControl'類型的值不能被添加到'UIElementCollection'類型的集合或字典中。

這個錯誤信息在主要的搜索引擎中只有一個不相關的命中(加上重複的),所以我還沒有找到任何有用的幫助。微軟自己的文檔似乎暗示這應該起作用。

任何想法如何解決這個問題?

+0

奇怪的是,當我構建一個最小測試應用程序時,我沒有這個問題。什麼會造成這種情況? – IanGilham

回答

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


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

看起來您可能在命名空間中犯了錯誤?當您導入My.LogTest並將其分配給xml-prefix local時,LoggerControl被列爲名稱空間My。將其更改爲:

xmlns:local="clr-namespace:My" 

而且我認爲它應該有效。否則,修復LoggerControl聲明。

+0

斑點。不過,這是我抄襲代碼並刪除了對僱主的引用的一個錯誤。我使用的命名空間是正確的。 – IanGilham

相關問題