2011-05-17 4 views
5

के लिए कस्टम बेसक्लास मैंने अपने प्रोजेक्ट के लिए कस्टमकंट्रोल बनाया है और मैं कुछ और बनाने जा रहा हूं। इन सभी नियंत्रणों में कुछ समान होगा, इसलिए मैंने एक अमूर्त वर्ग बनाया जो उपयोगकर्ता नियंत्रण से विरासत में मिलता है।WPF-Control

यदि मैं विजुअलस्टूडियो के माध्यम से कस्टमकंट्रोल बनाता हूं तो यह उपयोगकर्ता नियंत्रण से भी विरासत में आता है और मैं इसे अपने सार UserControl पर स्विच नहीं कर सकता क्योंकि VisualStudio कुछ जेनरेट की गई कोड फ़ाइलों को जोड़ देगा। मैं इन फ़ाइलों के साथ गड़बड़ नहीं करना चाहता हूँ।

मैं सिर्फ एक खाली कोड फ़ाइल बना सकता हूं और सब कुछ लिख सकता हूं, लेकिन फिर मैं एक्सएएमएल का उपयोग नहीं कर सकता (या मुझे अभी तक पता नहीं है)।

तो मैं XAML खोए बिना कस्टम बेस क्लास के साथ कस्टम कंट्रोल कैसे बना सकता हूं?

उत्तर

12

सबसे पहले, आप आसानी से उपयोगकर्ता नियंत्रण श्रेणी पदानुक्रम में अमूर्त कक्षाओं का उपयोग नहीं कर सकते हैं - यह डिजाइनर के साथ काम नहीं करता है (आपको "सारबेसबेस" संदेश का उदाहरण नहीं बना सकता है)। विंडोज़ फॉर्म एक ही मुद्दा है, और कुछ कामकाज थे, जिनमें से सभी दर्दनाक थे।

"अमूर्त" को हटाने के बाद, आप अपनी एक्सएएमएल परिभाषा में नामस्थान सहित कोड को बदलकर और अपने कोड को बदलकर सक्षम होना चाहिए पीछे तो जैसे:

<local:AbstractBase x:Class="Test.ConcreteControl" 
      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" 
      xmlns:local="clr-namespace:Test" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
    </Grid> 
</local:AbstractBase> 

और:

/// <summary> 
    /// Interaction logic for ConcreteControl.xaml 
    /// </summary> 
    public partial class ConcreteControl : AbstractBase 
    { 
     public ConcreteControl() 
     { 
      InitializeComponent(); 
     } 
    } 

यह मानता है कि आपकी बेस क्लास को "सारबेसबेस" कहा जाता है

+0

और जेनरेट की गई फ़ाइलों में कोई बदलाव नहीं है? –

+0

मैं बेलीव कोड जनरेटर केवल ऐसे फ़ील्ड बनाएगा जो बाल तत्वों के संदर्भ और प्रारंभिक कोड को प्रारंभिक कोड() विधि में जोड़ देंगे। – v00d00

+0

जेनरेट की गई फ़ाइलों को स्वचालित रूप से एबस्ट्रेटबेस के रूप में विरासत में बदल दिया गया है ... बहुत बहुत धन्यवाद, माइकहटन –