2010-01-08 7 views
62

मैं कोड में एक WPF पथ ऑब्जेक्ट जेनरेट करना चाहता हूं।डब्ल्यूपीएफ सी # पथ: कोड में ज्यामिति से पथ डेटा (XAML में नहीं) के साथ स्ट्रिंग से कैसे प्राप्त करें

XAML में मैं यह कर सकता:

<Path Data="M 100,200 C 100,25 400,350 400,175 H 280"> 

मैं कैसे संहिता में एक ही कर सकते हैं?

Path path = new Path(); 
Path.Data = "foo"; //This won't accept a string as path data. 

एक वर्ग/विधि उपलब्ध है कि PathGeometry या इसी तरह के PathData के साथ स्ट्रिंग धर्मान्तरित वहाँ है?

निश्चित रूप से किसी भी तरह XAML को पार्स किया जाता है और डेटा-स्ट्रिंग परिवर्तित हो जाती है?

उत्तर

117
var path = new Path(); 
path.Data = Geometry.Parse("M 100,200 C 100,25 400,350 400,175 H 280"); 

पथ। डेटा प्रकार ज्यामिति है। परावर्तक JustDecompile (EFF लाल गेट) का उपयोग करना, मैं अपने TypeConverterAttribute के लिए ज्यामिति की परिभाषा (XAML serializer का उपयोग करता है जो Geometry के प्रकार string के मूल्यों कन्वर्ट करने के लिए) को देखा। यह मुझे ज्यामिति कनवर्टर के लिए इंगित किया। कार्यान्वयन की जांच करते हुए, मैंने देखा कि यह पथ के स्ट्रिंग मान को ज्यामिति उदाहरण में परिवर्तित करने के लिए Geometry.Parse का उपयोग करता है।

+0

खैर साथ System.Windows.Media.FormattedText वर्ग इस्तेमाल कर सकते हैं मूल पाठ स्ट्रिंग से ज्यामिति बनाने के लिए, मैं एक मिनट लग गए जवाब के लिए एक गूगल खोज करने के लिए और नहीं था ' कुछ भी उचित नहीं मिल रहा है। तो, इस तरह के मामलों में (सरल समाधान मौजूद होना चाहिए), मैंने कोड पर देखा। यह जानकर कि डब्ल्यूपीएफ स्ट्रिंग्स से जटिल प्रकारों तक कैसे चलता है, मैंने लीड का पीछा किया। उत्तर को जानने के लिए प्रक्रिया को समझना दूसरा महत्व है। – Will

+5

ध्यान दें कि यह समाधान WP7 पर काम नहीं करता है। – Peterdk

+0

@ पीटरडेक: क्या WP7 में कोई विकल्प है? एक WP7 पथ स्ट्रिंग को ज्यामिति में कैसे परिवर्तित करता है? – Will

18

आप बाध्यकारी तंत्र का उपयोग कर सकते हैं।

var b = new Binding 
{ 
    Source = "M 100,200 C 100,25 400,350 400,175 H 280" 
}; 
BindingOperations.SetBinding(path, Path.DataProperty, b); 

मुझे आशा है कि यह आपकी मदद करेगी।

+3

बाहर निकलता है आपको विंडोज स्टोर और फोन ऐप्स के लिए ऐसा करना होगा। 'Geometry.Parse' उस नाम में समर्थित नामस्थान में है। – Travis

2

आप BuildGeometry() विधि

public string Text2Path() 
    { 
     FormattedText formattedText = new System.Windows.Media.FormattedText("Any text you like", 
      CultureInfo.GetCultureInfo("en-us"), 
       FlowDirection.LeftToRight, 
       new Typeface(
        new FontFamily(), 
        FontStyles.Italic, 
        FontWeights.Bold, 
        FontStretches.Normal), 
        16, Brushes.Black); 

     Geometry geometry = formattedText.BuildGeometry(new Point(0, 0)); 

     System.Windows.Shapes.Path path = new System.Windows.Shapes.Path(); 
     path.Data = geometry; 

     string geometryAsString = geometry.GetFlattenedPathGeometry().ToString().Replace(",",".").Replace(";",","); 
     return geometryAsString; 
    } 
संबंधित मुद्दे