Ich habe ein RichTextBox-Steuerelement in einer Anwendung, die ich gerade entwickle, die ich zusammen mit einer ToolBar verwende, um einen Rich-Text-Editor zu erstellen. Eine Funktion, die ich implementiert habe, ist die Möglichkeit für einen Benutzer, ein Bild einzufügen, jetzt ist es an dieser Stelle erwähnenswert, dass die Ausgabe von der RichTextBox RTF ist.Adorner zu Bild in WPF RichTextBox hinzufügen, wenn geladen
Wenn der Benutzer das Bild einfügt, verwende ich den folgenden Code, um das Bild zum Dokument hinzuzufügen und dann ein ResizeAdorner (Beispiel von hier RichTextBox Resizing Adorner) zu dem Bild hinzuzufügen, das dem Benutzer die Größe zu ändern. Wenn der Benutzer das Dokument speichert und lädt, bleibt die Größe des Bildes korrekt erhalten.
private void BtnInsertImage_OnClick(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Multiselect = false;
ofd.CheckFileExists = true;
ofd.CheckPathExists = true;
ofd.Filter = "Image files (*.png;*.jpg;*.jpeg;*.gif;*.bmp)|*.png;*.jpg;*.jpeg;*.gif;*.bmp";
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
ofd.Title = "Insert Image";
if (ofd.ShowDialog() == true)
{
BitmapImage bitmap = new BitmapImage(new Uri(ofd.FileName, UriKind.RelativeOrAbsolute))
{
CacheOption = BitmapCacheOption.OnLoad
};
Image image = new Image();
image.IsEnabled = true;
image.Source = bitmap;
image.Width = bitmap.Width;
image.Height = bitmap.Height;
image.Loaded += this.ImageOnLoaded;
image.Stretch = Stretch.Uniform;
InlineUIContainer container = new InlineUIContainer(image, this.rtbEditor.Selection.Start);
Paragraph paragraph = new Paragraph(container);
var doc = this.rtbEditor.Document;
doc.Blocks.Add(paragraph);
}
}
private void ImageOnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
var img = sender as Image;
if (img != null)
{
var al = AdornerLayer.GetAdornerLayer(img);
if (al != null)
{
al.Add(new ResizingAdorner(img));
}
}
}
Das Problem und die Frage ist, dass, wenn das Dokument, das ich bin nicht in der Lage, herauszufinden, geladen wird, wie die ResizingAdorner auf die Bilder in dem Dokument hinzuzufügen. Ich bin mit einer angefügten Eigenschaft den Inhalt des Dokuments zu laden, unter dem Code der Teil ist, das Dokument lädt:
var stream = new MemoryStream(Encoding.UTF8.GetBytes(GetDocumentXaml(richTextBox)));
var doc = new FlowDocument();
var range = new TextRange(doc.ContentStart, doc.ContentEnd);
range.Load(stream, DataFormats.Xaml);
richTextBox.Document = doc;
Könnte jemand helfen, wie ich bat die ResizingAdorner auf Bilder in dem geladenen Dokument hinzufügen kann?
Es ist der Inline selbst der InlineUIContainer ... – hasi05