2012-05-09 5 views
11

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

मैं फ़ॉन्ट प्राप्त करने में सक्षम हूं, जो Open Type Font है, अगर मैं अपनी .otf फ़ाइल को निष्पादन असेंबली (संसाधन लाइब्रेरी प्रोजेक्ट की बजाय) के लिए प्रोजेक्ट के संसाधन के रूप में जोड़ता हूं, बिल्ड कार्रवाई = 'संसाधन' और आउटपुट में कॉपी = 'कॉपी न करें', निम्नलिखित कोड का उपयोग करके:

FontFamily font = new FontFamily(new Uri("pack://application:,,,/"), 
         "./Resources/#CustomFont")); // Resources is a subfolder 

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

FontFamily font = new FontFamily(new Uri("pack://application:,,,/MyLibrary"), 
         "./Resources/#CustomFont")); 
         // there is a Resources subfolder in my library as well 
         // not sure about whether I need the . 

पुस्तकालय करता है इस तरह के चित्र के रूप में अन्य संसाधनों के लिए काम करते हैं।

मैंने बिना किसी सफलता के यूआरआई के लिए अन्य क्रमपरिवर्तनों का एक समूह भी कोशिश की है (यह अपवाद भी नहीं फेंकता है, केवल डिफ़ॉल्ट फ़ॉन्ट के साथ प्रदर्शित करता है, यह सुनिश्चित नहीं करता कि यह एक अलग मुद्दा है)।

मैं एमएसडीएन पर Packaging Fonts with Applications से काम कर रहा हूं, जिसमें फ़ॉन्ट संसाधन लाइब्रेरी बनाने का एक उदाहरण है, लेकिन पीछे कोड का उपयोग करने के लिए कोई उदाहरण नहीं है (मुझे इसके लिए कोड का उपयोग करने के लिए मजबूर होना पड़ता है)।

मुझे क्या करना है इसके बारे में कोई विचार? क्या मैं ट्रैक बंद कर रहा हूँ?

उत्तर

15

मेरे पास यह मेरे आवेदन में काम कर रहा है (कोड-पीछे में किसी अन्य असेंबली से फोंट लोड करना)। एक फ़ॉन्ट यूआरआई इस तरह के लिए:

pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/#Swis721 Md BT 

तरह से मैं यह (दर्दनाक परीक्षण और त्रुटि के बाद, अगर मैं सही ढंग से याद है) काम करने के लिए मिल गया है:

new FontFamily(
    new Uri("pack://application:,,,/MyAssembly.Name;component/Resources/Fonts/"), 
    "./#Swis721 Md BT" 
) 

आशा है कि मदद करता है।

+0

यह मेरे लिए काम नहीं किया, जिससे पता चलता है कि मैं कुछ अन्य है समस्या यह आपके लिए काम कर रही है। – Pysul

+0

धन्यवाद, मेरे लिए यह काम किया ... मुझे बहुत परीक्षण और त्रुटि बचाई! – yvesonline

+0

मैं पुष्टि कर सकता हूं कि यह पूरी तरह से काम करता है और इससे पहले कि मैंने बिना सफलता के लोडिंग के बहुत सारे संयोजनों की कोशिश की !!! मैंने सोचा कि डीएल के भीतर से संसाधनों की सापेक्ष पहुंच पर्याप्त होगी लेकिन स्पष्ट रूप से असेंबली नाम जोड़ने की आवश्यकता है भले ही फोंट को उसी असेंबली से एक्सेस किया जाना चाहिए! – too

1

डब्ल्यूपीएफ पैक नोटेशन का उपयोग करके प्रोग्रामफैमिक रूप से FontFamily ऑब्जेक्ट बनाने का समर्थन नहीं करता है।

डॉक्स पृष्ठ के अंत में यह कहते हैं, here

यहाँ उद्धरण है:

निरपेक्ष यूआरआई पैक का उपयोग करते हुए: अंकन: WPF अनुप्रयोगों आप एक बनाने के लिए अनुमति नहीं देते FontFamily एक फ़ॉन्ट के पूर्ण वर्दी संसाधन पहचानकर्ता (यूआरआई) संदर्भ के हिस्से के रूप में "पैक:" का उपयोग करके प्रोग्रामेटिक रूप से ऑब्जेक्ट करें। उदाहरण के लिए, "पैक: // एप्लिकेशन: ,,,/संसाधन/# पेरीकल्स लाइट" एक अमान्य फ़ॉन्ट संदर्भ है।

+0

तो यह कुछ लोगों के लिए क्यों काम कर रहा है? – IneedHelp

+0

ठीक है, कोड को देखे बिना मैं समझना भी शुरू नहीं कर सका। लेकिन दस्तावेज़ कहते हैं कि यह नहीं करता है। मैं कहूंगा कि दस्तावेज़ों पर भरोसा किया जाना चाहिए :) – Ninglin

+0

मेरा मतलब है उपर्युक्त पद में लोग कहते हैं कि वे इसे काम करने में कामयाब रहे हैं, लेकिन आप सही हैं, दस्तावेज़ीकरण में अधिक विश्वसनीयता है। – IneedHelp

0

(मुझे पता है, पुराने सवाल है, लेकिन मैं एक सही जवाब नहीं मिला।)

रॉस का जवाब केवल netframework के कुछ संस्करणों में काम करता है। (नेटफ्रेमवर्क 4 पर काम नहीं करता है।6)

मुझे लगता है कि यह सबसे अच्छा जवाब है:

एक आवेदन में फ़ॉन्ट्स गणना कर रहा है:

foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new Uri("pack://application:,,,/"), "./resources/")) 
      { 
       // Perform action. 
      } 

reference

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