如何完全覆盖或清除 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
ViewModel 的字符串属性的变化并且ContentChanged
是 RichEditBox 事件的处理程序TextChanged
,将创建一个无限循环,不断地将“\r”附加到 Vm.Content 和框的文本本身。当您替换TextGetOptions.None
为TextGetOptions.FormatRtf
ViewModel 的Content
属性时,添加看起来像空 RTF 段落的内容会变得更加混乱。
这是 ViewModel 中的 Content 属性定义,因此您可以确保一切正常:
/// <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
我为我的英语道歉。也欢迎所有有关它的更正:)