6

ठीक है, मैं इस समस्या का बीमार हो रहा हूं।WPF डिज़ाइन टाइम त्रुटि ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है

मैं UserControl बनाने की कोशिश कर रहा हूं जहां मैं XAML से अपनी सामग्री को पॉप्युलेट कर सकता हूं। पहले मैंने ऑब्जर्जेबल कोलेक्शन निर्भरता प्रजनन बनाया है। यह रनटाइम पर काम कर रहा था लेकिन डिजाइन समय पर एक त्रुटि हुई:

ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।

अब मैं सरल संस्करण किया:

public partial class UC : UserControl 
{ 
    public UC() 
    { 
     Labels = new ObservableCollection<Label>(); 
     InitializeComponent(); 

     Labels.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Labels_CollectionChanged); 
    } 

    void Labels_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     foreach (Label uc in e.NewItems) 
      Container.Children.Add(uc); 
    } 

    private ObservableCollection<Label> _lables = new ObservableCollection<Label>(); 

    public ObservableCollection<Label> Labels 
    { 
     get { return _lables; } 
     set { _lables = value; } 
    } 
} 

यह कैसे मैं अपने UserControll का उपयोग करना चाहते है

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns:gsh="clr-namespace:WpfApplication1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid Margin="0,0,0,30"> 
    <gsh:UC x:Name="uC1"> 
     <gsh:UC.Labels> 
      <Label Content="qwerty1" /> 
      <Label Content="qwerty2" /> 
     </gsh:UC.Labels> 
    </gsh:UC> 
</Grid> 

हालांकि यह अभी भी मेरे डिजाइन समय में त्रुटि देता है:

ऑब्जेक्ट संदर्भ नहीं किसी ऑब्जेक्ट के उदाहरण पर सेट करें।

तो अगर कोई मेरी मदद कर सकता है तो कृपया।

मैं UserControl कैसे बना सकता हूं जिसे मैं देशी नियंत्रणों का उपयोग कर सकता हूं जिसे मैं तत्वों के संग्रह के साथ पॉप्युलेट कर सकता हूं? मैं पहले से ही दूसरे दिन जवाब खोजने की कोशिश कर रहा हूं।

+1

आप 'InitializeComponent() कॉल करने के लिए प्रयास किया था का उपयोग कर बेहतर होगा क्या करना चाहिए ..

public UC() { InitializeComponent(); if (!Utils.IsInDesignerMode) { Labels = new ObservableCollection<Label>(); Labels.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Labels_CollectionChanged); } } 

; 'पहले? – Ofiris

उत्तर

8

मैं आमतौर पर देखने के लिए अगर मैं घटनाओं आदि तारों से पहले डिजाइन समय में हूँ जाँच ..

यह हो सकता है कि आपके कंटेनर डिजाइन मोड में रिक्त है।

public class Utils 
{ 
    public static bool IsInDesignerMode 
    { 
     get 
     { 
      return ((bool)(DesignerProperties.IsInDesignModeProperty 
       .GetMetadata(typeof(DependencyObject)).DefaultValue)); 
     } 
    } 

} 

हो सकता है कि अपने निर्माता में आप इस एक और नोट पर, हालांकि मुझे लगता है कि आप एक ItemsControl

+1

वाह का मतलब बहुत बहुत धन्यवाद। "IsInDesignerMode" के साथ आपका विचार बहुत दिलचस्प है लेकिन आपने जो लिंक दिया है वह शानदार है! अंत में मुझे पता है कि यह कैसे करें। दिलचस्प बात यह है कि कल मैं इस पृष्ठ का थोड़ा सा पढ़ रहा था और छोटे पढ़ने के बाद मैंने फैसला किया कि यह मेरे मुद्दे का उत्तर नहीं है। जाहिर है यह आपकी मदद के लिए फिर से धन्यवाद और धन्यवाद। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^