2010-02-02 12 views
12

मेरे पास दो पुस्तकालय और एक एकल एप्लिकेशन असेंबली प्रोजेक्ट लेआउट है और मैं सोच रहा हूं कि मैं अपने पुस्तकालयों में से एक में अपनी कुंजी द्वारा शैलियों का संदर्भ कैसे दे सकता हूं अन्य।किसी अन्य लाइब्रेरी में एक अलग असेंबली में परिभाषित WPF शैली कुंजी का संदर्भ कैसे लें

मेरे समाधान लेआउट:

  • WpfControls.dll - रखती है इस तरह के एक WPF आधारित NumericUpDown नियंत्रण के साथ ही अन्य बुनियादी नियंत्रण और कुछ शैलियों के रूप में सामान्य पुन: प्रयोज्य नियंत्रण के रूप में अच्छी तरह से है कि मैं पुन: प्रयोज्य बनाने के लिए करना चाहते हैं। उदाहरण के लिए कहें कि यहां मेरी स्टाइल कुंजी को MyButtonStyle के रूप में परिभाषित किया गया है।
  • SpecializedControls.dll - हमारे अनुप्रयोगों के लिए विशिष्ट नियंत्रण हैं जो कस्टम कंपोजिट नियंत्रण और WPC में UserControls जैसे अनुप्रयोग हैं। यह वह जगह है जहां मैं MyButtonStyle शैली WpfControls.dll असेंबली में परिभाषित शैली का संदर्भ देना चाहता हूं।
  • Application.exe - यह असेंबली SpecializedControls.dll असेंबली में परिभाषित नियंत्रणों का उपयोग करती है।

मैंने कुछ उदाहरणों को समझाया है कि यह एक सरल एकल नियंत्रण पुस्तकालय और एप्लिकेशन असेंबली के साथ कैसे किया जाए, लेकिन मेरे मामले में मेरे पास दो असेंबली और एक आवेदन है। तो मेरे मामले में दूसरे शब्दों में मेरे पास मेरी दूसरी नियंत्रण लाइब्रेरी में App.xaml नहीं है, जहां मैं मर्ज डिक्शनरी अवधारणा का उपयोग कर सकता हूं। मुझे पूरा यकीन है कि अगर मैं चाहता हूं कि मैं WAFFControls.dll असेंबली में परिभाषित जेनेरिक.एक्सएएमएल को मर्ज करने के लिए प्रत्येक नियंत्रण XAML फ़ाइल में सीधे मर्ज किए गए शब्दकोश संदर्भ डाल सकता हूं लेकिन मेरा अनुमान है कि इसका परिणाम शैलियों को अनावश्यक रूप से विभिन्न स्थानों में विलय कर दिया जाएगा मेरे स्पेशल कंट्रोल असेंबली में जो सबसे अच्छा समाधान नहीं लगता है। मामलों को और भी खराब बनाने के लिए, इन शब्दकोशों को भी एप्लिकेशन.एक्सई में विलय किया जा सकता है, क्या यह रनटाइम पर मेरे एप्लिकेशन को फटकारने लगता है?

क्या कोई भी इस तरह की शैलियों को कम से कम प्रोग्रामेटिक और संसाधन ओवरहेड के साथ साझा करने के लिए अनुशंसित या सर्वोत्तम दृष्टिकोण को स्पष्ट कर सकता है।

अद्यतन: थोड़ा और परीक्षण के बाद ऐसा लगता है कि मैं मुसीबत किसी भी संसाधन तो यह और भी एक ही विधानसभा के भीतर कुंजी है द्वारा Generic.xaml में परिभाषित संदर्भित हो रही है। इस बारे में कुछ गलत हो सकता है कि मैं कैसे समझ रहा हूं कि संसाधन कुंजी कैसे काम करती है, इसलिए मुझे थोड़ा और अनुसंधान करना होगा और साथ ही साथ घटक संसाधन को देखना होगा। अगर किसी के पास कोई संकेत या सुझाव हैं तो कृपया मदद करें।

उत्तर

14

डब्ल्यूपीएफ में संसाधन लुकअप पदानुक्रम में काम करता है: लॉजिकल पेड़, फिर एप्लिकेशन संसाधन, थीम संसाधन और अंत में सिस्टम संसाधन।

थीम संसाधनों को आम तौर पर केवल स्पष्ट रूप से एक्सेस किया जा सकता है (यहां तक ​​कि असेंबली के भीतर भी)। यह केवल शैलियों के लिए प्रासंगिक है, जहां लक्ष्य प्रकार का उपयोग निहित कुंजी के रूप में किया जा सकता है।

  • एक ComponentResourceKey का उपयोग करें:

    पूरा करने के लिए आपको बस इतना करना कोशिश कर रहे हैं क्या, वहाँ दो विकल्प हैं। यह एक विशेष संसाधन कुंजी है जो अन्य असेंबली से संसाधनों को संदर्भित करने की अनुमति देती है।उदाहरण के लिए, आप विषय शब्दकोश WpfControls में एक ब्रश को परिभाषित कर सकते हैं:

    <LinearGradientBrush x:Key="{ComponentResourceKey TypeInTargetAssembly=local:MyClass, ResourceId=MyBrush}"> 
        <GradientStop Color="Red" /> 
        <GradientStop Color="Blue" Offset="1" /> 
    </LinearGradientBrush> 
    

    और फिर आप SpecializedControls में यह देख सकते हैं:

    <UserControl Background="{StaticResource {ComponentResourceKey TypeInTargetAssembly=wpfControls:MyClass, ResourceId=MyBrush}}" /> 
    
  • उपयोग MergedDictionaries में एक शब्दकोश आयात करने के लिए आवेदन संसाधन। आप इसे एप्लिकेशन असेंबली में कर सकते हैं, और जब एप्लिकेशन लोड होता है, तो स्पेशल कंट्रोल में भी नियंत्रण इन संसाधनों का उपयोग करने में सक्षम होंगे। आपको इस परिदृश्य में डिज़ाइन-टाइम अनुभव के साथ कोई समस्या होगी, जिसे आप स्पेशल कंट्रोल में नकली App.xaml डालकर हल कर सकते हैं, जिसमें शब्दकोश का संदर्भ भी शामिल होगा।

आशा इस मदद करता है,

Aelij।

+3

मुझे एक ही समस्या का सामना करना पड़ रहा है। क्या आप दूसरा विकल्प बढ़ा सकते हैं? मैं नहीं देखता कि यह कैसे काम करेगा, उदाहरण के लिए, MergedDictionary का उपयोग करके किसी अन्य असेंबली में घोषित एक और शैली के आधार पर स्टाइल घोषित करना। – JoanComasFdz

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