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.None
TextGetOptions.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
मैं अपने अंग्रेजी के लिए खेद है। इसके बारे में सभी सुधारों का भी स्वागत है :)
ग्रेट समाधान, अपेक्षित के रूप में काम करता है। –