【问题标题】:WPF: Allow user to resize images in RichTextBoxWPF:允许用户调整 RichTextBox 中的图像大小
【发布时间】:2011-01-03 09:28:16
【问题描述】:

在 WPF 的 RichTextBox 控件中是否有允许用户调整插入图像大小的方法,或者您是否必须为此设计自己的方法。

我想要实现的目标如下所示,这是一个写字板做我想做的事情的屏幕截图:

注意事项:

  • 以纯文本形式读取RTF文件我发现与图像大小相关的控制标签是\picscalex100\picscaley100(其中100表示​​缩放到100%)。

所以是的,有没有适当的方法或技巧?关于如何进行编程的任何建议?还是我完全看错了控件?

【问题讨论】:

    标签: wpf image resize richtextbox rtf


    【解决方案1】:

    事实证明,您需要将图像包装在 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 示例需要一些出色的 hack 才能满足我的需求,但这是一个很好的开始。

    希望其他人觉得这很有用!

    【讨论】:

    • SDKSample.ResizingAdorner() 在哪里定义?您提供的两个链接都没有任何示例,因此您的答案根本没有用。
    • 很抱歉,如果没有帮助,但您是否尝试安装 Windows SDK(请参阅Building the Sample)。老实说,我不知道哪个版本,因为这是大约 7 年前 :(
    • 这正是我评论的原因。如果您的答案更完整,那么现在得到这个答案的用户就不会对这里该怎么做感到困惑了。
    • ResizingAdorner 我找到了如何构建它。答案在 C# 中,但您应该能够使用 Telerik Converter 转换为 VB.NET
    【解决方案2】:

    也许将图像复制到 Paint 并相应地调整大小,然后发布到 VB6 中的 RichTextBox。直接发布到 VB6 的图像往往会失真。任何从 Paint 复制到 VB6 的图像都会像在 Paint 中一样被粘贴。我在从 PDF 图像复制到 RichTextBox 时发现了这一点。

    【讨论】:

    • 这个问题是关于 WPF,而不是 VB6,以及用户能够在运行时旋转它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2021-12-20
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多