2012-06-27 11 views
7

पर किसी पैनल में UserControl को जोड़ने के लिए मुझे लगता है कि मुझे कुछ याद आ रहा है जो यहां स्पष्ट होना चाहिए, लेकिन मैं इस पर एक खाली चित्रण कर रहा हूं।एक WPF विंडो

मैं एक बहुत ही आदिम एक लॉग विंडो के रूप में उपयोग करने के लिए एक TextBox से ज्यादा कुछ नहीं युक्त UserControl का निर्माण किया है:

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

भी इतना आसान कुछ के साथ, विजुअल स्टूडियो 2010 में डिजाइनर मुख्य विंडो लोड नहीं कर सकता। दी गई त्रुटि यह है:

'LoggerControl' प्रकार का एक प्रकार 'UIElementCollection' प्रकार के संग्रहकर्ता शब्दकोश में जोड़ा नहीं जा सकता है।

इस त्रुटि संदेश में प्रमुख खोज इंजन (प्लस डुप्लिकेट) में केवल एक असंबंधित हिट है इसलिए मुझे कोई उपयोगी सहायता नहीं मिली है। माइक्रोसॉफ्ट के अपने दस्तावेज का अर्थ यह है कि यह काम करना चाहिए।

कोई विचार यह कैसे हल करें?

+0

आश्चर्यजनक रूप से पर्याप्त, जब मैं न्यूनतम परीक्षण अनुप्रयोग बनाता हूं तो मेरे पास यह समस्या नहीं है। इसका कारण क्या हो सकता है? – IanGilham

उत्तर

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


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

ऐसा लगता है कि आपने नेमस्पेसिंग में कोई गलती की हो सकती है? LoggerControl नामस्थान होने के रूप में सूचीबद्ध है, जबकि आप My.LogTest आयात कर रहे हैं और इसे xml-prefix स्थानीय में असाइन कर रहे हैं। इसे बदलें:

xmlns:local="clr-namespace:My" 

और मुझे लगता है कि इसे काम करना चाहिए। अन्यथा, LoggerControl घोषणा को ठीक करें।

+0

अच्छी तरह से देखा गया। यह एक गलती थी कि मैंने कोड की प्रतिलिपि कैसे बनाई और मेरे नियोक्ता के संदर्भों को हटा दिया। जिन नामों का मैं उपयोग कर रहा हूं वे सही हैं। – IanGilham