У меня есть приложение с RichTextBox и DocumentViewer (помещенное в TabControl), и я хочу сделать что-то вроде «горячего предварительного просмотра». Я привязал свойство DocumentViewer.Document
к RichTextBox.Document
Привязка:
<DocumentViewer Document="{Binding Document, Converter={StaticResource FlowDocumentToPaginatorConverter}, ElementName=mainRTB, Mode=OneWay}" />
А это код преобразователя:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
FlowDocument d = value as FlowDocument;
DocumentPaginator pagin = ((IDocumentPaginatorSource)d).DocumentPaginator;
FixedDocumentSequence result = null;
Size s = new Size(793.700787402, 1122.519685039);
pagin.PageSize = s;
using (MemoryStream ms = new MemoryStream())
{
TextRange tr = new TextRange(d.ContentStart, d.ContentEnd);
tr.Save(ms, DataFormats.XamlPackage);
Package p = Package.Open(ms, FileMode.Create, FileAccess.ReadWrite);
Uri uri = new Uri(@"memorystream://doc.xps");
PackageStore.AddPackage(uri, p);
XpsDocument xpsDoc = new XpsDocument(p);
xpsDoc.Uri = uri;
XpsDocument.CreateXpsDocumentWriter(xpsDoc).Write(pagin);
result = xpsDoc.GetFixedDocumentSequence();
}
return result;
}
Когда я запускаю это приложение, все в порядке, пока я не переключаюсь на вкладку с DocumentViewer. Приложение падает, и я получаю такое исключение:
Не удается выполнить операцию чтения в режиме только записи.
Что я делаю неправильно? Можно ли сделать эту привязку?