WinRt:将RTF字符串绑定到RichEditBox

搜索了很长时间将一些RTF文本绑定到Windowsapp store应用程序上的RichEditBox控件。 即使它应该在TwoMay绑定模式下运行。 …

…最后我找到了以下解决方案。 我使用DependencyProperty RtfText从原始RichEditBox控件创建了一个inheritance控件。

public class RichEditBoxExtended : RichEditBox { public static readonly DependencyProperty RtfTextProperty = DependencyProperty.Register( "RtfText", typeof (string), typeof (RichEditBoxExtended), new PropertyMetadata(default(string), RtfTextPropertyChanged)); private bool _lockChangeExecution; public RichEditBoxExtended() { TextChanged += RichEditBoxExtended_TextChanged; } public string RtfText { get { return (string) GetValue(RtfTextProperty); } set { SetValue(RtfTextProperty, value); } } private void RichEditBoxExtended_TextChanged(object sender, RoutedEventArgs e) { if (!_lockChangeExecution) { _lockChangeExecution = true; string text; Document.GetText(TextGetOptions.None, out text); if (string.IsNullOrWhiteSpace(text)) { RtfText = ""; } else { Document.GetText(TextGetOptions.FormatRtf, out text); RtfText = text; } _lockChangeExecution = false; } } private static void RtfTextPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) { var rtb = dependencyObject as RichEditBoxExtended; if (rtb == null) return; if (!rtb._lockChangeExecution) { rtb._lockChangeExecution = true; rtb.Document.SetText(TextSetOptions.FormatRtf, rtb.RtfText); rtb._lockChangeExecution = false; } } } 

这个解决方案对我有用 – 也许也适用于其他人。 🙂

已知问题: VirtualizingStackPanel.VirtualizationMode中的奇怪行为=“回收”