2012-06-22 11 views
12

मैंने कक्षा लाइब्रेरी असेंबली बनाई जिसमें मैंने कस्टम नियंत्रण बनाए, और मैंने जेनेरिक.एक्सएमएल फ़ाइल में डिफ़ॉल्ट शैलियों को परिभाषित किया।जेनेरिक.एक्सएएमएल से स्टाइल लागू नहीं हैं

ऐसा लगता है कि यह एक आम समस्या है, जब तक कि बहुत से लोग इसके बारे में पोस्ट कर रहे हों। हालांकि मुझे अपने मामले के लिए कोई उपयोगी उत्तर नहीं मिला।

  • जेनेरिक.एक्सएएमएल थीम्स फ़ोल्डर में है।
  • generix.xaml फ़ाइल बिल्ड एक्शन पृष्ठ पर सेट है।
  • ThemeInfo को मेरे AssemblyInfo.cs में ठीक तरह से परिभाषित किया गया है।

अपने परीक्षण आवेदन में, अगर मैं मैन्युअल विधानसभा आवेदन में अपने कस्टम नियंत्रण से generic.xaml फ़ाइल विलय App.xaml इस तरह दायर:

<Application.Resources> 
    <ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/MyControlsAssembly;component/Themes/generic.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

तो कस्टम नियंत्रण ठीक से कर रहे हैं थीम पर आधारित, लेकिन अगर मैं जेनेरिक.एक्सएमएल मैन्युअल रूप से मर्ज नहीं करता हूं, तो नियंत्रण डिफ़ॉल्ट विंडोज थीम के साथ दिखाई देता है।

क्या आप कृपया मुझे बता सकते हैं कि मैं क्या भूल रहा हूं और/या गलत कर रहा हूं?

अतिरिक्त जानकारी:

  • मेरे ThemeInfo विधानसभा विशेषता के रूप में पालन परिभाषित किया गया है:

    [assembly: ThemeInfo(ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)]

    (नोट: परिणाम सिर्फ ThemeInfo विशेषता के लिए मानकों के किसी भी संयोजन के साथ एक ही है)

  • थीम्स फ़ोल्डर में generic.xaml फ़ाइल के बगल में दो अन्य .xaml फ़ाइलें हैं।

  • थीम्स फ़ोल्डर में एक उपफोल्डर है जिसमें स्वयं एक और .xaml फ़ाइल है। निम्न नमूना शैली के साथ अगर आप विषयों फ़ोल्डर के अंदर एक generic.xaml फ़ाइल है

    public class MyCustomControl : Control 
    { 
        static MyCustomControl() 
        { 
         DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl))); 
        } 
    } 
    

    फिर,:

+4

Do आपके पास अभी भी आपके कस्टम नियंत्रण पर एक स्थिर निर्माता में DefaultStyleKeyProperty सेट है? – Nogusta

+0

किसी भी भाग्य को यह पता लगाना? मेरे कस्टम नियंत्रण असेंबली के साथ मेरे पास लगभग वही सटीक चीज है। यदि मैं genic.xaml फ़ाइल में App.config में कोई संदर्भ जोड़ता हूं तो नियंत्रण थीम थीम्ड हैं। अगर मैं इसे छोड़ देता हूं तो मुझे कुछ भी नहीं मिलता है। –

+0

क्या यह लिंक लागू होता है? http://social.msdn.microsoft.com/Forums/vstudio/en-US/2e1fb162-e828-4fd9-832f-d2791c1980b4/isnt-genericxaml-supposed-to-loaded- स्वचालित रूप से मुझे एक ही समस्या का सामना करना पड़ रहा है, और मुझे लगता है कि यह मूल कारण –

उत्तर

7

आप अपने कस्टम नियंत्रण निर्माता में निम्न पंक्ति की जरूरत

<Style TargetType="{x:Type local:MyCustomControl}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:MyCustomControl}"> 
       <Border> 
        <Label>Testing...</Label> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

अब स्टाइल स्वचालित रूप से बिना किसी अतिरिक्त विलय के लागू हो जाएगी।

+0

यह मेरे लिए काम नहीं करता है। प्रारंभिक प्रश्न – bigfoot

+0

पर मेरी टिप्पणी देखें एक खाली समाधान के साथ शुरू करें और देखें कि क्या आप इसे वहां से काम करने के लिए प्राप्त कर सकते हैं? – Eternal21

+0

यही वह है जो मैं कर रहा हूं। मैं Xceed डेटा ग्रिड से प्राप्त कर रहा हूँ। अगर मैं एक नया MyControl बना देता हूं: नियंत्रण या MyButton: बटन, यह काम करता है। शायद यह Xceed थीम समर्थन है जो यहां खेलने में आता है, और मुझे विषयों पर उनके ट्यूटोरियल देखने की ज़रूरत है, या बस मेरे आवेदन में मर्ज शब्दकोश स्वीकार करें। जब तक अन्य विचार सतह नहीं। – bigfoot

3

मेरी कस्टम नियंत्रण लाइब्रेरी में थीम्स \ जेनेरिक.एक्सएएमएल में डिफ़ॉल्ट शैलियों को लागू करने के लिए मैंने एक अच्छी तरह से स्थापित ओपन सोर्स कंट्रोल लाइब्रेरी (MahApps) से प्रेरणा लेने का फैसला किया। यह प्रोजेक्ट आपको कस्टम नियंत्रण लाइब्रेरी को ढांचे और लेआउट करने का एक अच्छा उदाहरण देता है।

एक लम्बी कहानी कम कट, विषय-वस्तु \ Generic.xaml आप अपने कस्टम में AssemblyInfo.cs फ़ाइल में निम्नलिखित शामिल करने की ज़रूरत में आपकी डिफ़ॉल्ट शैलियों प्राप्त करने के लिए नियंत्रित करता है पुस्तकालय:

[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] 

मेरे मामले में, मेरा कस्टम नियंत्रण AssemblyInfo।सीएस की तरह कुछ देखा:

using System.Runtime.InteropServices; 
using System.Windows; 
using System.Windows.Markup; 

[assembly: AssemblyCopyright("...")] 
[assembly: ComVisible(false)] 

[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] 

[assembly: AssemblyVersion("1.0.0.0")] 
[assembly: AssemblyFileVersion("1.0.0.0")] 
[assembly: AssemblyInformationalVersion("1.0.0.0")] 
[assembly: AssemblyTitleAttribute("...")] 
[assembly: AssemblyDescriptionAttribute("")] 
[assembly: AssemblyProductAttribute("...")] 
[assembly: AssemblyCompany("...")] 
0

सुनिश्चित नहीं हैं कि अगर यह WPF में काम करता है, लेकिन यह Silverlight में मेरे लिए काम करता है:

कंस्ट्रक्टर:

public class MyCustomControl : Control 
{ 
    static MyCustomControl() 
    { 
     this.Style = (Style)Application.Current.Resources["MyCustomControlStyle"]; 
    } 
} 

शैली:

<Style x:Key="MyCustomControlStyle" TargetType="{local:MyCustomControl}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{local:MyCustomControl}"> 
       <Border> 
        <Label>Testing...</Label> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
संबंधित मुद्दे