2010-01-10 4 views
2

Есть ли метод в элементе управления RichTextBox в WPF, чтобы позволить пользователю изменять размер вставленных изображений или вам нужно разработать свой собственный метод для этого.WPF: разрешить пользователю изменять размер изображений в RichTextBox

То, что я пытаюсь достичь будет показано ниже, скриншот WordPad делать то, что я хочу:

enter image description here

Примечание:

  • Чтение файла RTF как обычный текст I что контрольные теги, связанные с размером изображения, равны \picscalex100 и \picscaley100 (где 100 обозначает масштабирование до 100%).

Так, да, есть ли подходящий способ или трюк? Любые советы о том, как это сделать? Или я вообще смотрю на неправильный контроль?

ответ

4

Оказывается, вы должны обернуть свое изображение в ResizingAdorner.

Красивая и простая реализация этого кода находится на 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 образца потребуется некоторое большое хакерство к удовлетворить мои потребности, но какое прекрасное начало.

Надеюсь, что кто-то найдет это полезным!

+0

Где находится 'SDKSample.ResizingAdorner()' defined? Ни одна из ссылок, которые вы предоставили, не имеет каких-либо примеров, поэтому ваш ответ совсем не полезен. – Ortund

+0

Извините, если это не поможет, но вы попытались установить Windows SDK (см. [Построение образца] (https://msdn.microsoft.com/en-us/library/ms771714 (loband) .aspx # Anchor_1)). Я честно понятия не имею, какую версию, так как это было около 7 лет назад :( – Jay

+0

Именно поэтому я прокомментировал. Если бы ваш ответ был более полным, пользователи, пришедшие на этот ответ, теперь были бы гораздо менее смущены тем, что здесь делать. – Ortund

Смежные вопросы