2010-03-05 14 views
5

मैं सिर्फ डब्ल्यूपीएफ में डाइविंग कर रहा हूं और यह मेरी शैली के लिए थोड़ा अजीब और निराशाजनक हूं: कुछ का मूल्य संसाधन क्यों हो सकता है लेकिन आप मूल्य को सीधे प्रस्तुत करने के लिए मूल्य निर्धारित नहीं कर सकते हैं? उदाहरण:मुझे WPF में "संसाधन" का उपयोग क्यों करना चाहिए?

यह मान्य है:

<ToggleButton> 
    <ToggleButton.Resources> 
     <Image x:Key="cancelImage" Source="cancel.png" /> 
    </ToggleButton.Resources> 
    <ToggleButton.Style> 
     <Style TargetType="{x:Type ToggleButton}"> 
      <Setter Property="Content" Value="{DynamicResource cancelImage}" /> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

लेकिन यह नहीं है:

<ToggleButton> 
    <ToggleButton.Style> 
     <Style TargetType="{x:Type ToggleButton}"> 
      <Setter Property="Content"> 
       <Setter.Value> 
        <Image Source="cancel.png" /> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ToggleButton.Style> 
</ToggleButton> 

क्या अंतर है? दोनों काम क्यों नहीं करते? मुझे कुछ चीजों के लिए "संसाधन" बनाना पसंद नहीं है क्योंकि यह मेरे कोड को विभाजित करता है और इसे पढ़ने में और अधिक कठिन बना सकता है।

और हाँ, मैं अपने उदाहरण जानते हो इस

<ToggleButton> 
    <Image Source="cancel.png" /> 
</ToggleButton> 

की तरह सरल किया जा सकता लेकिन उस समय नहीं है।

+1

यह एक कम्युनिटी विकी क्यों है? – AnthonyWJones

+0

इसलिए मैंने जो भी गलत सूचना पोस्ट की है उसे संपादित किया जा सकता है। क्या यह उचित नहीं था? – tyriker

उत्तर

3

सेटर्स के साथ काम करते समय, सेटर के लिए मूल्य को "जमे हुए" होने की क्षमता का समर्थन करना होता है। यह एक मूल्य प्रकार (structs और enums सहित) हो सकता है, या एक वर्ग जो फ्रीज़ेबल से प्राप्त होता है।

यह आपके सौंदर्य की भावना में बहुत मदद नहीं कर सकता है, लेकिन फ़ाइल के संसाधन अनुभाग (या संसाधन डॉट कॉम) के संसाधन अनुभाग के शीर्ष पर अपने सभी संसाधनों को घोषित करने के लिए अक्सर क्लीनर होता है, क्योंकि उन्हें व्यक्तिगत शैली के संसाधनों में जोड़ने के विपरीत या नियंत्रण।

+0

यह थोड़ी देर के लिए मुझे फिसल गया। एक बार जब आप जमे हुए कुछ के प्रदर्शन लाभ का एहसास हो जाते हैं, तो यह समझ में आता है कि क्यों एमएस सेटर्स को फ्रीज करने योग्य मानता है। –

+0

तो आप संसाधन बनाकर कह रहे हैं, मैं इसे ठंडा कर रहा हूं? अन्यथा, मुझे रन टाइम पर की संपत्ति बदलने का अवसर हो सकता है, जो लेआउट/ड्राइंग उपप्रणाली के लिए एक प्रदर्शन बोझ है। क्या यह इसका सारांश है? – tyriker

+1

नहीं, यह जमे हुए नहीं जा रहा है, स्टेटिक रिसोर्स सेटर में तत्व है जो जमे हुए है। जब टेम्पलेट का दृश्य पेड़ बनाया जाता है, तो यह गैर-जमे हुए छवि तत्व को पा सकता है। चूंकि छवि फ्रीजबल से प्राप्त नहीं होती है, इसलिए दुर्भाग्य से इसे जमे हुए नहीं किया जा सकता है, यही कारण है कि आप इसे एक सेटर में उपयोग नहीं कर सकते हैं। –

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