2010-10-20 21 views
5

मुझे WPF में नियंत्रण विरासत में समस्या है। मैंने बेसयूसर नियंत्रण नामक उपयोगकर्ता नियंत्रण बनाया है। मैं इस नियंत्रण के लिए अन्य WPF उपयोगकर्ता नियंत्रणों के लिए आधार नियंत्रण होना चाहता हूं। इसलिए मैंने फर्स्ट कॉम्पोनेंट नामक एक और उपयोगकर्ता नियंत्रण लिखा। अगले चरण में मैं हालांकि संकलन के दौरान यहwpf - UserControl विरासत

FirstComponent : BaseControl 

के लिए इस कोड

FirstComponent : UserControl 

बदल मैं यह त्रुटि

Partial declarations of 'controlinheritance.componenets.FirstComponent' must not specify different base classes 

मैं BaseControl से प्राप्त करने के FirstComponent सक्षम करने के लिए क्या करना चाहिए मिल सकता है?

EDIT अभिषेक के जवाब के लिए धन्यवाद मैं नियंत्रण प्राप्त करने में कामयाब रहा। कैसे मेरे पास एक और सवाल है। बेस क्लास में मैंने एक संपत्ति सार्वजनिक ग्रिड _ मेनग्रिड {प्राप्त; सेट; }। अब मैं अपनी व्युत्पन्न कक्षा में इस ग्रिड का एक उदाहरण बनाना चाहता हूं। इसलिए मैंने इस कोड का उपयोग किया हाउवर मुझे एक त्रुटि मिलती है संपत्ति '_MainGrid' का कोई मूल्य नहीं है। लाइन 8 स्थिति 36.

उत्तर

5

क्या आपने मेरा पूरा लेख देखा था?

http://www.dotnetfunda.com/articles/article832-define-base-class-for-window--usercontrol-.aspx

मुझे आशा है कि इस में आप में मदद मिलेगी।

यदि आप प्रोजेक्ट निष्पादित करने का प्रयास करते हैं, तो यह निश्चित रूप से में त्रुटि फेंक देगा। ऐसा इसलिए है क्योंकि, प्रत्येक WPF विंडो को वर्तमान विंडो लेआउट के बजाय बेसविंडो लेआउट से बनाया गया है। दूसरे शब्दों में, यदि आप एक्सएएमएल देखते हैं, तो आप रूट टैग विंडो देखेंगे, जो मौजूदा विंडो के पैरेंट है।

इस प्रकार यह सुनिश्चित करने के लिए कि सबकुछ पूरी तरह से काम करता है, हमें रूट तत्व बदलने की आवश्यकता है।

तो यह लगेगा की तरह:

<local:BaseWindow Class="BaseWindowSample.Window1" 
        Name="winImp" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:BaseWindowSample" 
        Title="Window1"> 
... 
</local:BaseWindow> 

आप इस प्रतिमिनट देखते हैं, तो आप देख सकते हैं मैं अपने परियोजना के लिए एक नाम स्थान जोड़ा और स्थानीय के रूप में यह नाम दिया है। तो BaseWindow BaseWindow से आना चाहिए और इस तरह यह स्थानीय प्रकार है: BaseWindow

+0

धन्यवाद यह मुझे बहुत मदद की । क्या आप मेरे संपादित संदेश को देख सकते हैं – Berial

0

खैर प्रारंभिक त्रुटि का कारण था क्योंकि वर्ग वास्तव में एक आंशिक वर्ग कि के अलावा कहीं और एक विशेष आधार विरासत लिस्टिंग किया गया था स्थान जहां आपने अपनी बेस क्लास बदल दी है।

अपनी संपत्ति 'विरासत' का सवाल है, मैं

public Grid MainGrid 
{ 
    get 
    { 
     return base.MainGrid; 
    } 

    set 
    { 
     base.MainGrid = value; 
    } 
} 

आज़माने का सुझाव हालांकि मैं नोट करना चाहिए कि यह आप अपने आधार वर्ग के किसी भी मौजूदा उदाहरण (रों) के लिए एक लिंक प्रदान नहीं करेगा। यदि आप चाहते हैं कि आपकी व्युत्पन्न कक्षा में उस ग्रिड के एकमात्र उदाहरण के लिए गारंटीकृत लिंक हो, तो आपको बेस क्लास संपत्ति को स्थैतिक बनाना होगा। किस मामले में, आपका कोड इस तरह दिखेगा ...

public Grid MainGrid 
{ 
    get 
    { 
     return BaseControl.MainGrid; 
    } 

    set 
    { 
     BaseControl.MainGrid = value; 
    } 
} 
0

जब आप फ़ाइल

FirstComponent : BaseControl 

XAML.cs में एक UserControl के लिए एक अलग आधार वर्ग निर्दिष्ट तुम भी XAML में यह बदलना चाहिए

<Base:BaseControl x:Class="FirstComponent" 
      xmlns:Base="clr-namespace:MyApplication.Base" 
      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" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 


    </Grid> 
</Base:BaseControl> 
संबंधित मुद्दे