gpt4 book ai didi

c# - 如何彻底清除/设置WinRT 的RichEditBox 的文本?

转载 作者:太空狗 更新时间:2023-10-29 23:23:20 29 4
gpt4 key购买 nike

如何完全覆盖或清除 WinRT 的 RichEditBox 的文本(和格式)?

我问是因为方法 SetText它的文档属性似乎只是附加新文本。

因此“绑定(bind)”如下:

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 的字符串属性和 ContentChangedTextChanged 的处理程序RichEditBox 的事件,将创建一个无限循环,不断将“\r”附加到 Vm.Content 和框的文本本身。当您更换 TextGetOptions.NoneTextGetOptions.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

我为我的英语道歉。也欢迎所有有关它的更正:)

最佳答案

额外的/r(或\par,如果您查询 RTF)似乎是 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);

关于c# - 如何彻底清除/设置WinRT 的RichEditBox 的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18319898/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com