2009-11-13 16 views
5

मैं एक कस्टम नियंत्रण बटन से ली गई है:WPF कस्टम व्युत्पन्न नियंत्रण शैली

class MyControl : Button{} 

और लगता है, इस वर्ग के रिक्त है (कोई सदस्य नहीं हैं)।

<ResourceDictionary Source="BureauBlue.xaml" /> 

तो, खिड़की देखो पर सभी नियंत्रण की तरह यह है कि विषय फ़ाइल में परिभाषित किया गया है:

आवेदन की मुख्य विंडो संसाधनों में मैं ResourceDictionary कि ज्यादातर WPF नियंत्रण (विषय तथाकथित) के लिए शैलियों शामिल का उपयोग करें। लेकिन शैलियों MyControl नियंत्रणों पर प्रभावित नहीं हैं। बटन नियंत्रण के समान दिखने के लिए मैं MyControl कैसे कर सकता हूं?

अद्यतन: BureauBlue.xaml में बटन के लिए शैली कोई कुंजी है और निम्नलिखित तरीके से परिभाषित किया गया है:

<Style TargetType="{x:Type Button}" BasedOn="{x:Null}"> ...</Style> 

उत्तर

14

देखें आप अपने स्थिर निर्माता में DefaultStyleKey के मेटाडाटा को ओवरराइड:

static MyControl() 
{ 
    DefaultStyleKeyProperty.OverrideMetadata(
     typeof(MyControl), 
     new FrameworkPropertyMetadata(typeof(MyControl))); 
} 

फिर, अपने संसाधनों में, आप बटन पर अपनी शैली के आधार पर कर सकते हैं:

<Style TargetType="{x:Type lcl:MyControl}" BasedOn="{StaticResource {x:Type Button}}" /> 

मैं में की कोशिश की है आधार वर्ग (आपके मामले में बटन) को इंगित करने के लिए डिफ़ॉल्ट स्टाइलके के मेटाडेटा को ओवरराइड करने के लिए अतीत, लेकिन यह काम नहीं कर रहा है।

+6

धन्यवाद, यह काम करता है, लेकिन अजीब: अगर मैं थीम्स/जेनेरिक.एक्सएएमएल में ऐसी शैली को परिभाषित करता हूं तो इससे कोई प्रभाव नहीं पड़ता है। और अगर मैं अपनी शैली या ऐप संसाधनों में इस शैली को परिभाषित करता हूं, तो सबकुछ ठीक है। तो, यह स्थिति अस्पष्ट है जब मैं एक बटन में अपना बटन नियंत्रण नियंत्रण करता हूं और इसे किसी अन्य से उपयोग करूँगा, तो मैं अपने नियंत्रण पुस्तकालय में कैसे परिभाषित कर सकता हूं कि मेरे बटनएक्स नियंत्रण को डिफ़ॉल्ट रूप से बटन के रूप में देखना चाहिए? – Zim

0

चेक बटन के लिए शैली अपने BureauBlue.xaml में है और एक्स को दूर करता है, तो: कुंजी शैली से विशेषता

+0

शैली बटन के लिए BureauBlue.xaml में कोई भी कुंजी है और बुद्धिमान निम्नलिखित परिभाषित किया गया है: <शैली TargetType = "{x: टाइप बटन}" आधारितऑन = "{x: नल}"> ... – Zim

3

लक्ष्य प्रकार संपत्ति निर्दिष्ट प्रकार से प्राप्त कक्षाओं के लिए काम नहीं करती है। this question

1

पूरी तरह से कोड this answer on another forum में ऐसा करने के लिए काम करता है

this.Style = new Style(GetType(), this.FindResource(typeof(System.Windows.Controls.Button)) as Style); 
संबंधित मुद्दे