2016-01-11 6 views
10

में सेगो एमडीएल 2 संपत्तियों का उपयोग कर प्रोग्रामेटिक रूप से टेक्स्टब्लॉक कैसे बनाएं I मुझे लगता है कि यह आसान होना चाहिए, लेकिन मुझे जिस आइकन की आवश्यकता है, उसके बजाय मुझे स्क्वायर बॉक्स का एक गुच्छा मिलता है।डब्ल्यूपीएफ

मूल रूप से मैं कठिन XAML में एक मेनू कोडिंग किया गया था:

code omitted 
<ListBoxItem Name="menuHome" > 
<StackPanel Orientation="Horizontal"> 
    <TextBlock FontFamily="Segoe MDL2 Assets" Text="&#xE10F;" FontSize="16" VerticalAlignment="Center" /> 
    <TextBlock Text="Home" FontSize="16" VerticalAlignment="Center" Padding="15,0,0,0"/> 
</StackPanel> 
</ListBoxItem> 
code omitted 

मैं अब गतिशील रूप से तो यह मेनू बनाने के लिए मैं निम्नलिखित किया है:

ListBoxItem menuHome = new ListBoxItem(); 
StackPanel menuHomeStackPanel = new StackPanel() { Orientation = Orientation.Horizontal }; 
menuHomeStackPanel.Children.Add(new TextBlock() { FontFamily = new FontFamily("Segoe MDL2 Assets"), FontSize = 16, VerticalAlignment = VerticalAlignment.Center, Text = "&#xE10F;" }); 
menuHomeStackPanel.Children.Add(new TextBlock() { FontSize = 16, VerticalAlignment = VerticalAlignment.Center, Text = "Home", Padding = new Thickness(15, 0, 0, 0) }); 
menuHome.Content = menuHomeStackPanel; 
menuHome.Name = "menuHome"; 
IconsListBox.Items.Add(menuHome); 

यह लगभग मुझे के अलावा एक ही देता है

screenshot

0123: जो नीचे स्क्रीनशॉट में देखा जा सकता है Segoe MDL2 आस्तियों फ़ॉन्ट

कोई विचार - शायद सरल ...?

+1

VB.net के लिए पाठ = ChrW ("& HE10F") – Nitin

उत्तर

26

&#xE10F; एक एक्सएमएल चरित्र इकाई है। आपके मूल एक्सएएमएल में, यह एक एक्सएमएल पार्सर द्वारा स्वाभाविक रूप से पार्स किया गया था, जो एक्सएमएल पार्सिंग नियमों द्वारा खेल रहा था, जो एक सोलह-बिट यूनिकोड चरित्र में सबस्ट्रिंग को परिवर्तित करता था। जब तक ढांचे ने TextBlock नियंत्रण बनाया, तब तक &#xE10F; लंबे समय से एक यूनिकोड चरित्र में परिवर्तित हो गया था।

लेकिन अब आपको यह सी # कोड मिला है। इस स्ट्रिंग को सी # पार्सर द्वारा पार्स किया जा रहा है, जिसके नियम कहते हैं कि आठ यूनिकोड वर्णों की पूरी तरह से सामान्य स्ट्रिंग है।

Text = "&#xE10F;" 

आप इसे सामान के आठ वर्ण गुजर रहे हैं केवल एक XML पार्सर का कोई मतलब कर सकते हैं - लेकिन कोई XML पार्सर किसी भी अधिक शामिल है। नियंत्रण आपके चुने हुए फ़ॉन्ट में उन आठ अक्षरों को प्रदर्शित करता है, और ऐसा होता है कि फ़ॉन्ट के लिए उनके लिए कोई ग्लिफ नहीं है, इसलिए यह आठ खाली बक्से प्रदर्शित करता है।

सी # an equivalent notation for specifying Unicode characters in a string literal है। &#x उपसर्ग और ';' के बजाय पोस्टफिक्स, आप बस \x के साथ चार-अंकों वाले हेक्स वर्ण कोड को उपसर्ग करते हैं। वही हेक्स कोड, लेकिन इस विशेष पार्सर को बताने का एक अलग तरीका (अच्छी तरह से, तकनीकी रूप से, लेक्सर - लेकिन अभी वहां नहीं जाते हैं) कि उन चार हेक्स वर्णों का अर्थ कुछ खास है।

बजाय इस कोशिश:

Text = "\xE10F" 

लेकिन इनमें से किसी भी काम करेगा; - धन्यवाद

Text = Char.ConvertFromUtf32(0xE10F); 

// Same value, in base 10 
Text = Char.ConvertFromUtf32(57615); 
+1

एक आकर्षण की तरह काम किया उपयोग करना चाहिए: सी # एक स्ट्रिंग शाब्दिक के बाहर पूर्णांकों व्यक्त करने के लिए और अधिक तरीके हैं। वह क्या कर रहा है? - कह रहा है "यह एक चरित्र है और एक स्ट्रिंग अक्षर नहीं है"? – Rick

+2

@ रिक '\ x' सी # स्ट्रिंग अक्षर में प्रयुक्त उपसर्ग है यह इंगित करने के लिए कि अगले चार वर्ण एक हेक्स वर्ण कोड हैं। यह XML '& # xE10F;' नोटेशन का सटीक समतुल्य है। –

+0

कूल धन्यवाद - अभी भी इस तरह की छोटी टाइटबिट उठा रहा है। – Rick