2013-03-06 5 views
11

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

उदाहरण के लिए: मैं एक WPF एप्लिकेशन बना रहा हूं और मैं एक टैबकंट्रोल का उपयोग करना चाहता हूं, लेकिन मैं इसमें बड़े बदलाव करना चाहता हूं। तो मैं एक शैली बना सकता हूं और इसे टैबकंट्रोल और टैबइटम पर लागू कर सकता हूं। यह ठीक है, लेकिन मैं अपने विंडो XAML को स्पष्ट रखने के लिए अपने संसाधन कहां रख सकता हूं और शैली को अन्य विंडोज़ या परियोजनाओं से भी सुलभ कर सकता हूं?

मैंने पाया कि मैं इसे App.xaml में जोड़ सकता हूं लेकिन यह केवल एक प्रोजेक्ट का समाधान है और इस परियोजना के आइटमों के बीच साझा करने की अनुमति देता है। साथ ही, मुझे लगता है कि इन टेम्पलेट्स को किसी अन्य पेज या ऐप.एक्सएएमएल में रखने की तुलना में अन्य कोड से थोड़ा अलग होना बेहतर होगा?

+0

आप संसाधन डिक्शनरी बना सकते हैं और उसे क्लास लाइब्रेरी में जोड़ सकते हैं। आपको इसे अपने App.xaml पर संदर्भित करना होगा और आप कई परियोजनाओं में लाइब्रेरी का उपयोग कर सकते हैं –

उत्तर

21

मैं आमतौर पर एक अलग स्टाइल प्रोजेक्ट बनाता हूं, जिसे मैं उन परियोजनाओं से संदर्भित करता हूं जिन्हें मैं शैली बनाना चाहता हूं। मैं एक स्टाइल ResourceDictionary बनाने के लिए,

Styling project

हर नियंत्रण के लिए: स्टाइल परियोजना इस तरह एक निश्चित संरचना है। मेरे बटन के लिए उदाहरण के लिए:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="PrimaryButtonStyle" TargetType="Button"> 
    </Style> 

    <Style x:Key="ToolbarButton" TargetType="Button"> 
     <Setter Property="BorderThickness" Value="0" /> 
     <Setter Property="Margin" Value="3"/> 
     <Setter Property="Background" Value="Transparent"></Setter> 
    </Style> 
</ResourceDictionary> 

एक मुख्य ResourceDictionary में, मैं अन्य सभी शब्दकोशों विलय, फ़ाइल IncaDesign.xaml, जो आप ऊपर चित्र में देख सकते हैं में इस मामले में:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:controls="clr-namespace:Commons.Controls;assembly=Commons"> 

    <ResourceDictionary.MergedDictionaries> 

     <ResourceDictionary Source="Converter/Converter.xaml" /> 
     <ResourceDictionary Source="Styles/Button.xaml" /> 
     <ResourceDictionary Source="BitmapGraphics/Icons.xaml" /> 

    </ResourceDictionary.MergedDictionaries> 

    <!-- Default Styles --> 
    <Style TargetType="Button" BasedOn="{StaticResource PrimaryButtonStyle}"></Style> 
</ResourceDictionary> 

ध्यान दें कि मैंने डिफ़ॉल्ट शैलियों को कैसे परिभाषित किया है, जो स्वचालित रूप से लागू होते हैं, जब तक आप अन्यथा निर्दिष्ट नहीं करते हैं। हर खिड़की या नियंत्रण में, जिसे आप शैली बनाना चाहते हैं, आपको केवल इस ResourceDictionary को संदर्भित करने की आवश्यकता है। स्रोत की परिभाषा, जो विधानसभा (/Commons.Styling;component...)

<UserControl.Resources>   
    <ResourceDictionary>    
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Commons.Styling;component/IncaDesign.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary>   
</UserControl.Resources> 

डिफ़ॉल्ट शैलियों स्वचालित रूप से अब की स्थापना की जाएगी लिए एक संदर्भ है ध्यान दें, और आप स्पष्ट रूप से एक संसाधन का उपयोग करना चाहते हैं, आप StaticResource का उपयोग कर ऐसा कर सकते हैं,।

<Viewbox Height="16" Width="16" Margin="0,0,10,0"> 
    <ContentControl Content="{StaticResource FileIcon32}" /> 
</Viewbox> 

यह मेरी राय है, जो मॉड्यूलर समाधान सहित बहुत जटिल समाधान, के लिए काम करता है, प्रिज्म के साथ बनाया गया उदाहरण के लिए में बहुत अच्छा समाधान है।

+0

ध्यान रखें कि संसाधन डिक्शनरी संसाधन संसाधन भारी हैं और यदि संभव हो तो आप उनसे बचने से बेहतर हैं। [देखें VI।] (Http://pelebyte.net/blog/2011/07/11/twelve-ways-to-improve-wpf-performance/) –

+1

सबसे महत्वपूर्ण बात यह है कि क्रॉस संदर्भ और शब्दकोशों के अनियंत्रित विलय से बचने के लिए सबसे महत्वपूर्ण बात यह है कि ।यह वास्तव में परेशानी का कारण बनता है, क्योंकि आप संसाधनों को स्वयं नहीं, हर समय अपने सभी संसाधनों के डुप्लिकेट बनाते हैं। मुझे लगता है कि यह मुद्दा है, जो लेख आपने लिंक किया है उसका जिक्र है। मुझे एक जटिल परियोजना में संसाधनों से बचने का कोई तरीका नहीं दिख रहा है ... और यह स्टाइलिंग प्रोजेक्ट का बिल्कुल सही विचार है: कई स्थानों पर शब्दकोश विलय करने से बचने के लिए ... – Marc

+0

बिल्कुल वही जो मैं ढूंढ रहा था :) धन्यवाद। मुझे बस इसके साथ संभावित समस्याओं के बारे में और अधिक पढ़ना होगा। –

1

आप एक ऐसे प्रोजेक्ट को बना सकते हैं जिसमें संसाधन शब्दकोश शामिल हैं, या तो आपके समाधान में या अलग में। आपकी परियोजना क्लास लाइब्रेरी प्रकार होगी और फिर किसी अन्य प्रोजेक्ट से संदर्भित डीडीएल आसानी से हो सकती है। यहां एक आलेख वर्णन किया गया है: Resource Dictionary Article

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