wp7

2011-09-27 7 views
6

में क्लिक करने योग्य टेक्स्ट ब्लॉक में लिंक कैसे सेट करें मेरे पास एक टेक्स्ट बॉक्स में लिंक हैं। टेक्स्ट में सामग्री रन टाइम के दौरान उत्पन्न होती है। मेरी समस्या यह है कि टेक्स्ट के अंदर लिंक क्लिक करने योग्य नहीं हैं, कैसे बना सकते हैं टेक्स्ट ब्लॉक के अंदर सभी लिंक क्लिक करने योग्य हैं ताकि जब मैं एक लिंक टैप करूँ तो इसे वेब ब्राउज़र खोलना चाहिए। एंड्रॉइड में हम इसे ऑटोलिंक का उपयोग करके सेट कर सकते हैं। क्या ऐसा विकल्प wp7 या wp7.1 mango में उपलब्ध है?wp7

उत्तर

12

HyperLink का उपयोग करें।

<TextBlock> 
    <Run>Pure Text</Run> 
    <Hyperlink Command="{Binding HyperLinkTapped}">http://google.com</Hyperlink> 
    <Run>Pure Text Again</Run> 
</TextBlock> 

यह विंडोज फोन 7.1 (आम) से समर्थित है।

यदि आवश्यक हो, तो आप रनटाइम पर अपने डेटा से अपना फ़्लो डॉक्यूमेंट बना सकते हैं। कैसे एक स्ट्रिंग से एक FlowDocument उत्पन्न करने के लिए पर

उदाहरण:

private void OnMessageReceived(string message) 
{ 
    var textBlock = new RichTextBox() 
    { 
     TextWrapping = TextWrapping.Wrap, 
     IsReadOnly = true, 
    }; 

    var paragraph = new Paragraph(); 

    var runs = new List<Inline>(); 

    foreach (var word in message.Split(' ')) 
    { 
     Uri uri; 

     if (Uri.TryCreate(word, UriKind.Absolute, out uri) || 
      (word.StartsWith("www.") && Uri.TryCreate("http://" + word, UriKind.Absolute, out uri))) 
     { 
      var link = new Hyperlink(); 
      link.Inlines.Add(new Run() { Text = word }); 
      link.Click += (sender, e) => 
      { 
       var hyperLink = (sender as Hyperlink); 
       new WebBrowserTask() { Uri = uri }.Show(); 
      }; 

      runs.Add(link); 
     } 
     else 
     { 
      runs.Add(new Run() { Text = word }); 
     } 

     runs.Add(new Run() { Text = " "}); 
    } 

    foreach (var run in runs) 
     paragraph.Inlines.Add(run); 

    textBlock.Blocks.Add(paragraph); 

    MessagesListBox.Children.Add(textBlock); 
    MessagesListBox.UpdateLayout(); 
} 
+0

एक पूर्ण उदाहरण के साथ अपडेट किया गया। –

+6

मैं 7.1 का उपयोग कर रहा हूं, और यह xaml मेरे लिए भी संकलित नहीं करता है। – Nathan

+1

सबसे पहले, यह 'हाइपरलिंक' होना चाहिए, 'एल' कम मामला है। दूसरा, मुझे 7.1 प्रोजेक्ट में संकलन करने के लिए xaml कोड नहीं मिल सकता है ... –

2

ऐसा करने के लिए कार्यक्षमता में कोई निर्मित नहीं है।

यदि आपका टेक्स्ट (लिंक सहित) HTML है तो आप इसे वेबब्रोसर नियंत्रण में प्रदर्शित कर सकते हैं।
यदि आपको टेक्स्ट को पार्स करने और लिंक बनाने की आवश्यकता नहीं है। (एक रैपपैनल के अंदर टेक्स्टब्लॉक और हाइपरलिंकबटन का एक संयोजन शायद इसके लिए जाने का तरीका है।)

+0

हाइपरलिंक बटन का उपयोग करने का कोई कारण नहीं ;-) –

2

Silverlight RichTextBox नियंत्रण में आप कर सकते हैं।

<RichTextBox> 
    <Paragraph> 
     <Run Text="This have to navigate me to Google: "/> 
     <Hyperlink NavigateUri="http://google.com" TargetName="_blank">google.com</Hyperlink> 
    </Paragraph> 
</RichTextBox> 
+0

बिल्कुल सही - धन्यवाद! –