2013-08-19 5 views
5

WinRT के RichEditBox के पाठ (और स्वरूपण) को पूरी तरह से ओवरराइट या साफ़ कैसे करता है?WinRT के RichEditBox के पाठ को पूरी तरह से साफ़/सेट कैसे करें?

मैं पूछ रहा हूं क्योंकि इसकी दस्तावेज़ प्रॉपर्टी की विधि SetText विधि केवल नए टेक्स्ट को जोड़ने के लिए प्रतीत होती है।

इस प्रकार नीचे के रूप में "बाइंडिंग":

void Vm_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "Content") 
     richEditBox.Document.SetText(Windows.UI.Text.TextSetOptions.None, Vm.Content); 
} 

private void ContentChanged(object sender, RoutedEventArgs e) 
{ 
    RichEditBox box = (RichEditBox)sender; 

    string content; 
    box.Document.GetText(Windows.UI.Text.TextGetOptions.None, out content); 

    Vm.Content = content; 
} 

जहां Vm_PropertyChanged सिर्फ ViewModel की Content स्ट्रिंग संपत्ति और ContentChanged में परिवर्तनों को सुनता RichEditBox की TextChanged घटना के लिए कोई हैंडलर है, अनंत लूप पैदा करेगा Vm.Content और बॉक्स के टेक्स्ट में लगातार "\ r" जोड़ना। जब आप TextGetOptions.NoneTextGetOptions.FormatRtf के साथ प्रतिस्थापित करते हैं तो ViewModel की Content संपत्ति खाली आरटीएफ अनुच्छेदों की तरह दिखने वाली चीज़ को और भी गन्दा हो जाती है।

यहाँ ViewModel में सामग्री संपत्ति परिभाषा ताकि आप सुनिश्चित कर सकते हैं कि सब कुछ ठीक इसके साथ:

/// <summary> 
    /// The <see cref="Content" /> property's name. 
    /// </summary> 
    public const string ContentPropertyName = "Content"; 

    private string _content; 

    /// <summary> 
    /// Sets and gets the Content property. 
    /// Changes to that property's value raise the PropertyChanged event. 
    /// </summary> 
    public string Content 
    { 
     get 
     { 
      return _content; 
     } 

     set 
     { 
      if (_content == value) 
      { 
       return; 
      } 

      RaisePropertyChanging(ContentPropertyName); 
      _content = value; 
      RaisePropertyChanged(ContentPropertyName); 
     } 
    } 

संपादित करें:

कुछ प्रयोग:

 richEditBox.Document.SetText(Windows.UI.Text.TextSetOptions.None, string.Empty); 
     string content; 
     richEditBox.Document.GetText(Windows.UI.Text.TextGetOptions.None, out content); 
     //content became "\r" 

     richEditBox.Document.SetText(Windows.UI.Text.TextSetOptions.None, content); 
     richEditBox.Document.GetText(Windows.UI.Text.TextGetOptions.None, out content); 
     //content became "\r\r" 

संपादित करें:

एक और प्रयोग:

TextGetOptions.None के लिए एक सरल कामकाज आउटपुट पर अतिरिक्त "\ r" को ट्रिम कर रहा है। हालांकि TextGetOptions.FormatRtf साथ बातें सिर्फ इतना है कि सरल नहीं हैं:

 RichEditBox box = new RichEditBox(); 

     box.Document.SetText(Windows.UI.Text.TextSetOptions.FormatRtf, string.Empty); 
     string content; 
     box.Document.GetText(Windows.UI.Text.TextGetOptions.FormatRtf, out content); 

     //content is now 
     // {\\rtf1\\fbidis\\ansi\\ansicpg1250\\deff0\\nouicompat\\deflang1045{\\fonttbl{\\f0\\fnil Segoe UI;}}\r\n{\\colortbl ;\\red255\\green255\\blue255;}\r\n{\\*\\generator Riched20 6.2.9200}\\viewkind4\\uc1 \r\n\\pard\\ltrpar\\tx720\\cf1\\f0\\fs17\\lang1033\\par\r\n}\r\n\0 

     box.Document.SetText(Windows.UI.Text.TextSetOptions.FormatRtf, content); 
     box.Document.GetText(Windows.UI.Text.TextGetOptions.FormatRtf, out content); 

     //and now it's 
     // {\\rtf1\\fbidis\\ansi\\ansicpg1250\\deff0\\nouicompat\\deflang1045{\\fonttbl{\\f0\\fnil Segoe UI;}{\\f1\\fnil Segoe UI;}}\r\n{\\colortbl ;\\red255\\green255\\blue255;}\r\n{\\*\\generator Riched20 6.2.9200}\\viewkind4\\uc1 \r\n\\pard\\ltrpar\\tx720\\cf1\\f0\\fs17\\lang1033\\par\r\n\r\n\\pard\\ltrpar\\tx720\\f1\\fs17\\par\r\n}\r\n\0 

मैं अपने अंग्रेजी के लिए खेद है। इसके बारे में सभी सुधारों का भी स्वागत है :)

उत्तर

4

अतिरिक्त/आर (या \ par अगर आप आरटीएफ के लिए पूछते हैं) RichEditBox में एक बग प्रतीत होता है। हालांकि, इस तरह कुछ करने से इसे काम किया जा सकता है:

 string temp; 
     // Do not ask for RTF here, we just want the raw text 
     richEditBox.Document.GetText(TextGetOptions.None, out temp); 
     var range = richEditBox.Document.GetRange(0, temp.Length - 1); 

     string content; 
     // Ask for RTF here, if desired. 
     range.GetText(TextGetOptions.FormatRtf, out content); 
+0

ग्रेट समाधान, अपेक्षित के रूप में काम करता है। –

0

आप SetText(Windows.UI.Text.TextSetOptions.None, null) पर कॉल कर सकते हैं। SetText के प्रलेखन से:

यदि स्ट्रिंग न्यूल है, तो दस्तावेज़ में टेक्स्ट हटा दिया गया है।

+0

दुर्भाग्य से, AgumentNullException: मान शून्य नहीं हो सकता है। दस्तावेज कहता है कि कौन सा अजीब बात है। –

+0

और चूंकि दस्तावेज़ीकरण केवल आईटीक्स्ट डॉक्यूमेंट इंटरफेस से संबंधित है, हम कभी नहीं जानते कि कार्यान्वयन वर्ग क्या करेगा। –

+0

@ माइकलके। सोंडेज 'SetText (..., string.Empty)' का उपयोग कर काम करता है? –

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