2010-11-07 11 views
6

संसाधन लाइन में यह लाइन क्यों संकलित-त्रुटि में नहीं होती है?ImageSource को WPF संसाधन के रूप में क्यों अनुमति दी गई है?

<Window.Resources> 
    <ResourceDictionary> 
     <ImageSource x:Key="aKey">SomePath</ImageSource> 
    </ResourceDictionary> 
</Window.Resources> 

मेरी समझ यह थी कि इसका परिणाम डिफ़ॉल्ट सीटीआर का उपयोग करके छवि स्रोत का एक उदाहरण होगा। इसके बाद सभी निर्दिष्ट गुणों को सेट किया जाएगा।

हालांकि छवि स्रोत एक सार वर्ग है - तो इसका परिणाम संकलन त्रुटि में क्यों नहीं होता है?

+0

शानदार सवाल, इसको उत्तर देने वाले किसी के लिए तत्पर हैं। – Blounty

+0

मुझे जवाब नहीं पता, लेकिन मेरा अनुमान है कि संसाधन प्रबंधक प्रत्येक संसाधन के ठोस प्रकार को जानता है। यह निर्दिष्ट संसाधन का एक उदाहरण बनाता है और केवल तभी जब यह इमेजसोर्स से प्राप्त नहीं होता है तो रन-टाइम अपवाद होता है। – Tergiver

उत्तर

4

XAML के इस बिट का प्रयास करें:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <Window x:Key="aKey">BlogHeader.jpg</Window> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Grid> 
     <Image Source="{StaticResource aKey}"/> 
    </Grid> 
</Window> 

यह ठीक संकलित है, लेकिन जब आप इसे चलाते हैं आप एक क्रम XamlParseException मिलती है:

की वस्तु के लिए विशेषता 'स्रोत' में मूल्य कनवर्ट नहीं कर सकता टाइप करें 'System.Windows.Media.ImageSource'।

आप एक सरल प्रकार उदाहरण के लिए, Window के बजाय का उपयोग कर प्रयास करें:

तत्व प्रकार 'WpfApplication1.SomeClass' नहीं करता है:

public class SomeType 
{ 
} 

आप एक संकलन समय त्रुटि प्राप्त होगी स्ट्रिंग 'BlogHeader.jpg'

का विश्लेषण करने के लिए एक संबद्ध टाइप कनवर्टर है, तो उत्तर TypeConverterद्वारा प्रदान किया गया हैजो ImageSourceConverter है। जादू ImageSourceConverter.ConvertFrom में होता है जो एक स्ट्रिंग लेता है, इससे Uri बनाता है, और BitmapFrame.Create का उपयोग BitmapFrame बनाने के लिए करता है जो ImageSource से लिया गया है।

ध्यान दें कि मैंने पहले उदाहरण में Window का उपयोग केवल एक प्रकार का उपयोग करने के लिए किया था जो स्ट्रिंग से टाइप कनवर्टर प्रदान करता है।

+0

टाइप कन्वर्टर्स का उपयोग किसी मूल्य के स्ट्रिंग प्रस्तुति को किसी संपत्ति द्वारा आवश्यक विशिष्ट प्रकार में बदलने के लिए किया जाता है। उपर्युक्त स्पष्टीकरण Image.Source प्रॉपर्टी के लिए खाता है ... मेरा प्रश्न इमेजसोर्स टैग के बारे में था - यानी एक अमूर्त वर्ग (संसाधन के रूप में संग्रहीत करने के लिए) का एक उदाहरण बनाना - यह एक छवि स्रोत का उदाहरण कैसे बना सकता है कि यह निर्दिष्ट गुणों को स्थापित करने के साथ आगे बढ़ सकता है? – Gishu

+1

यह इसे समझाता है। Image.Source propery केवल यह सुनिश्चित करने के लिए है कि यह तत्काल हो जाए। यह ImageSourceConverter.Convert के माध्यम से बनाया गया है जैसा मैंने समझाया। मैं इसे नहीं बना रहा हूं, मैंने स्रोत के निशान का पालन किया। – Tergiver

+0

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

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