WPF:允许用户在RichTextBox中调整图像大小

4
在WPF的RichTextBox控件中,是否有一种方法允许用户调整插入图像的大小,或者你必须自己设法实现这个功能。我想要实现的效果如下图所示,这是WordPad正在做的事情的截图: enter image description here 注意:
读取RTF文件作为纯文本时,我发现与图像大小相关的控件标签是

\picscalex100

\picscaley100

(其中100表示缩放到100%)。
因此,是否有一种适当的方法或技巧来实现这一点?关于如何编程实现它,有什么建议吗?或者我完全看错了控件?
2个回答

7
原来您需要将图像包裹在一个 ResizingAdorner 中。
可以在 Marco Zhou 的博客中找到这个代码的美丽而简单的实现,网址为 http://msdn.microsoft.com/en-us/library/ms771714%28loband%29.aspx(第二篇文章)。 ResizingAdorner 的代码可作为 MSDN 示例获取,网址为 http://msdn.microsoft.com/en-us/library/ms771714%28loband%29.aspx
下面是我正在使用的 VB.net 代码的等效版本。
Dim img As Image
Sub AddImg() Handles btnAddImage.Click
    Dim dlg As New Microsoft.Win32.OpenFileDialog
    dlg.Filter = "Image Files(*.*) | *.*"
    If dlg.ShowDialog Then
        img = New Image
        AddHandler img.Loaded, AddressOf imgloaded
        img.Source = New BitmapImage(New Uri(dlg.FileName, UriKind.Absolute)) With {.CacheOption = BitmapCacheOption.OnLoad}
        Dim container As New BlockUIContainer(img)
        rtb.Document.Blocks.Add(container)
    End If
End Sub

Private Sub imgloaded(ByVal sender As Object, ByVal e As Windows.RoutedEventArgs)
    Dim al As AdornerLayer = AdornerLayer.GetAdornerLayer(img)
    If Not (al Is Nothing) Then
        al.Add(New SDKSample.ResizingAdorner(img))
    End If
End Sub
ResizingAdorner示例需要进行一些大量的修改才能满足我的需求,但这是一个很好的开始。

希望其他人也会发现这个有用!


SDKSample.ResizingAdorner() 定义在哪里?你提供的链接都没有任何示例,所以你的回答一点用处也没有。 - Ortund
抱歉如果这不是有用的,但你尝试安装Windows SDK了吗(请参见构建示例)。老实说,我不知道是哪个版本,因为这是大约7年前的事情:( - Jay Wick
这正是我发表评论的原因。如果你的回答更完整,现在来到这里查看答案的用户就不会对该怎么做感到困惑了。 - Ortund
1
ResizingAdorner中,我找到了如何构建它的答案。这个答案是用C#编写的,但你应该能够使用Telerik Converter将其转换为VB.NET。 - D.Kastier

-1
也许可以将图像复制到画图工具中并按比例调整大小,然后再将其发布到VB6的RichTextBox中。直接发布到VB6的图像往往会变形。从画图工具中复制到VB6的任何图像都会粘贴为在画图工具中的样子。我是在从PDF图像复制到RichTextBox时发现了这一点。

这个问题涉及到WPF,而不是VB6,并且涉及到用户能够在运行时旋转它。 - Jay Wick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接