Come si può sovrascrivere o cancellare completamente il testo (e la formattazione) di RichEditBox di WinRT?Come cancellare completamente/impostare il testo di RichEditBox di WinRT?
Sto chiedendo perché il metodo SetText della proprietà Documento sembra solo per aggiungere nuovo testo.
Così la "vincolante", come di seguito:
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;
}
dove Vm_PropertyChanged
solo ascolta per i cambiamenti nella proprietà Content
di stringa del ViewModel e ContentChanged
è un gestore per TextChanged
caso di RichEditBox, creerà un ciclo infinito aggiungendo costantemente "\ r" al Vm.Content e al testo del riquadro stesso. Quando si sostituisce TextGetOptions.None
con TextGetOptions.FormatRtf
la proprietà Content
di ViewModel diventa ancora più caotica aggiungendo qualcosa che assomiglia a paragrafi RTF vuoti.
Ecco la definizione di proprietà contenuti nel ViewModel modo da poter garantire che è ok tutto con esso:
/// <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);
}
}
EDIT:
Alcuni esperimenti:
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"
EDIT:
Un altro esperimento:
Una soluzione semplice per TextGetOptions.None
sta ritagliando "\ r" in uscita. Tuttavia con TextGetOptions.FormatRtf
le cose non sono proprio così semplice:
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
mi scuso per il mio inglese. Tutte le correzioni relative sono ugualmente benvenute :)
Ottima soluzione, funziona come previsto. –