如何完全覆蓋或清除WinRT RichEditBox的文本(和格式)?如何完全清除/設置WinRT的RichEditBox文本?
我在問,因爲它的Document屬性的方法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
只是監聽在視圖模型的Content
字符串屬性和ContentChanged
變化是TextChanged
事件RichEditBox的處理程序,將創建一個無限循環不斷將「\ r」附加到Vm.Content和框的文本本身。 當您將TextGetOptions.None
替換爲TextGetOptions.FormatRtf
時,ViewModel的Content
屬性會變得更加混亂,從而添加看起來像空RTF段落的東西。
下面是視圖模型的內容屬性定義,所以你可以確保一切正常吧:
/// <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
我爲我的英語道歉。所有關於它的更正也歡迎:)
偉大的解決方案,按預期工作。 –