В этом разделе
WpfThumbnailViewer - это WPF-контрол, предназначенный для отображения миниатюр связанной коллекции изображений.
WpfThumbnailViewer может работать отдельно
- WpfThumbnailViewer создает собственную коллекцию изображений
- связанная коллекция изображений доступна с помощью свойства WpfImageViewerBase.Images
- навигация по коллекции изображений возможна с помощью свойства WpfImageViewerBase.FocusedIndex
- миниатюра добавляется/обновляется/удаляется, если изображение добавляется/обновляется/удаляется из связанной коллекции изображений
WpfThumbnailViewer может работать как "ведомый просмотрщик" другого
WpfImageViewer или
WpfThumbnailViewer
- связь между просмотрщиками может быть установлена с помощью свойства WpfImageViewerBase.MasterViewer подчиненного просмотрщика
- ведомый просмотрщик использует коллекцию изображений главного просмотрщика
- доступ к общей коллекции изображений можно получить с помощью свойства WpfImageViewerBase.Images главного или подчиненного просмотрщика
- навигация по коллекции изображений может осуществляться с помощью WpfImageViewerBase.FocusedIndex свойство главного или подчиненного просмотрщика
- Свойства WpfImageViewerBase.FocusedIndex главного и подчиненного просмотрщиков изменяются синхронно
- изображение добавляется/обновляется/удаляется в просмотрщике изображений, если изображение добавляется/обновляется/удаляется в связанной коллекции изображений
Вот C#/VB.NET код, который демонстрирует, как загрузить изображения в ImageViewer, связать ImageViewer с ThumbnailViewer-ом, инвертировать первое изображение в коллекции изображений - изображение в ImageViewer и миниатюра в ThumbnailViewer будут инвертированы:
wpfImageViewer1.Images.Add("myimages.tif");
wpfThumbnailViewer1.MasterViewer = wpfImageViewer1;
wpfImageViewer1.Images[0].Invert();
wpfImageViewer1.Images.Add("myimages.tif")
wpfThumbnailViewer1.MasterViewer = wpfImageViewer1
wpfImageViewer1.Images(0).Invert()
Размер миниатюры
Миниатюры имеют 2 размера:
- "физический размер" - размер растрового изображения, связанного с миниатюрой
- "видимый размер" - размер растрового изображения, связанного с миниатюрой, после масштабирования
"Физический размер" миниатюр можно установить с помощью свойства
WpfThumbnailViewer.ThumbnailSize. Минимальный "физический размер" миниатюры - 32х32 пикселя, максимальный "физический размер" миниатюры - 1024х1024 пикселей.
"Видимый размер" миниатюр можно установить с помощью свойства
WpfThumbnailViewer.ThumbnailScale. "Видимый размер" рассчитывается как произведение "физического размера" и коэффициента масштабирования.
Вот список коэффициентов масштабирования:
- Smallest - видимый размер составляет 0.5 от физического размера
- Small - видимый размер составляет 0.75 от физического размера. физический размер
- Normal - видимый размер равен физическому размеру
- Large - видимый размер составляет 1.5 от физического размера
Для миниатюр можно выделить два блока памяти:
Миниатюры создаются заново и "память для оригинальных миниатюр" выделяется заново, когда свойство
WpfThumbnailViewer.ThumbnailSize изменяется.
Существующие миниатюры масштабируются при изменении
WpfThumbnailViewer.ThumbnailScale, выделяется "память для масштабированных миниатюр", если
WpfThumbnailViewer.ThumbnailScale не равно "Normal".
Важно
: Не используйте миниатюры большого размера, если в этом нет необходимости.
Внешний вид миниатюры и подпись к миниатюре
Определение внешнего вида миниатюры с помощью свойств
Вид миниатюр в
WpfThumbnailViewer можно изменить с помощью WPF стиля.
Свойство
WpfThumbnailViewer.ThumbnailContainerStyle позволяет получить/установить текущий стиль миниатюр, используемый в
WpfThumbnailViewer-е.
Стандартный стиль миниатюр определен в классе
ThumbnailImageItemStyle.
Определение подписи к миниатюрам с помощью свойств
Класс
ThumbnailImageItemCaption позволяет определить заголовок миниатюры: формат заголовка или пользовательский текст, отступ, привязку, шрифт текста, цвет текста.
Вот C#/VB.NET код, который демонстрирует, как настроить заголовок миниатюры с помощью события
ThumbnailImageItemCaption.CaptionFormatted:
/// <summary>
/// Sets the custom thumbnail caption.
/// </summary>
/// <param name="thumbnailViewer">The thumbnail viewer.</param>
public static void SetCustomThumbnailCaption(Vintasoft.Imaging.Wpf.UI.WpfThumbnailViewer thumbnailViewer)
{
thumbnailViewer.ThumbnailCaption.CaptionFormatted += ThumbnailCaption_CaptionFormatted;
thumbnailViewer.ThumbnailCaption.IsVisible = true;
}
/// <summary>
/// Handles the CaptionFormatted event of the ThumbnailCaption.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="Vintasoft.Imaging.Wpf.UI.ThumbnailImageItemCaptionFormattedEventArgs"/> instance containing the event data.</param>
private static void ThumbnailCaption_CaptionFormatted(object sender, Vintasoft.Imaging.Wpf.UI.ThumbnailImageItemCaptionFormattedEventArgs e)
{
Vintasoft.Imaging.VintasoftImage image = e.Thumbnail.Source;
int imageIndex = e.ThumbnailViewer.Images.IndexOf(image);
if (e.ThumbnailViewer.SelectedThumbnails.Contains(e.Thumbnail))
{
e.Caption = "Selected";
}
else
{
e.Caption = string.Format("{0}, page {1}", System.IO.Path.GetFileName(image.SourceInfo.Filename), image.SourceInfo.PageIndex + 1);
}
}
''' <summary>
''' Sets the custom thumbnail caption.
''' </summary>
''' <param name="thumbnailViewer">The thumbnail viewer.</param>
Public Shared Sub SetCustomThumbnailCaption(thumbnailViewer As Vintasoft.Imaging.Wpf.UI.WpfThumbnailViewer)
AddHandler thumbnailViewer.ThumbnailCaption.CaptionFormatted, AddressOf ThumbnailCaption_CaptionFormatted
thumbnailViewer.ThumbnailCaption.IsVisible = True
End Sub
''' <summary>
''' Handles the CaptionFormatted event of the ThumbnailCaption.
''' </summary>
''' <param name="sender">The source of the event.</param>
''' <param name="e">The <see cref="Vintasoft.Imaging.Wpf.UI.ThumbnailImageItemCaptionFormattedEventArgs"/> instance containing the event data.</param>
Private Shared Sub ThumbnailCaption_CaptionFormatted(sender As Object, e As Vintasoft.Imaging.Wpf.UI.ThumbnailImageItemCaptionFormattedEventArgs)
Dim image As Vintasoft.Imaging.VintasoftImage = e.Thumbnail.Source
Dim imageIndex As Integer = e.ThumbnailViewer.Images.IndexOf(image)
If e.ThumbnailViewer.SelectedThumbnails.Contains(e.Thumbnail) Then
e.Caption = "Selected"
Else
e.Caption = String.Format("{0}, page {1}", System.IO.Path.GetFileName(image.SourceInfo.Filename), image.SourceInfo.PageIndex + 1)
End If
End Sub
Свойство
WpfThumbnailViewer.ThumbnailCaption позволяет получить или установить подпись к миниатюре в просмотрщике миниатюр.
Примеры
Главное окно WpfImagingDemo (файл MainWindow.xaml) содержит XAML-код, который показывает, как создать собственный стиль для миниатюр
WpfThumbnailViewer-а.
Всплывающая подсказка для миниатюр
WpfThumbnailViewer позволяет отображать подсказки для миниатюр.
Всплывающая подсказка миниатюры может быть установлена с помощью свойства ThumbnailImageItem.ToolTip.
События просмотрщика миниатюр
WpfThumbnailViewer может вызывать следующие события:
Рендеринг миниатюр
WpfThumbnailViewer рендерит миниатюры в отдельных потоках, число количество потоков для рендеринга миниатюр можно задать с помощью свойства
WpfThumbnailViewer.ThumbnailRenderingThreadCount.
Все миниатюры генерируются по умолчанию. Свойство
WpfThumbnailViewer.GenerateOnlyVisibleThumbnails позволяет генерировать только видимые миниатюры, это может быть необходимо для медленных компьютеров.
Контекстное меню просмотрщика миниатюр
WpfThumbnailViewer может иметь стандартное контекстное WPF-меню как любой WPF-контрол.
Горячие клавиши просмотрщика миниатюр
WpfThumbnailViewer имеет горячие клавиши:
- Ctrl+C - копирует изображение выбранной миниатюры в буфер обмена
- Ctrl+X - копирует изображение выбранной миниатюры в буфер обмена и удаляет изображение из связанной коллекции изображений.
- Ctrl+V - вставляет изображение из буфера обмена как изображение выбранной миниатюры
- Del - удаляет выбранные миниатюры и изображения из связанной коллекции изображений.
- Ctrl+A - выбирает все миниатюры.
Горячие клавиши можно включить/отключить с помощью свойств
WpfImageViewerBase.InputGestureCopy,
WpfImageViewerBase.InputGestureCut,
WpfImageViewerBase.InputGestureInsert,
WpfImageViewerBase.InputGestureDelete,
WpfThumbnailViewer.InputGestureSelectAll.
Поведение горячих клавиш можно переопределить с помощью методов WpfImageViewerBase.GetCopyCommand, WpfImageViewerBase.GetCutCommand, WpfImageViewerBase.GetInsertCommand, WpfImageViewerBase.GetDeleteCommand.
Выбор нескольких миниатюр в просмотрщике миниатюр
WpfThumbnailViewer позволяет выбирать миниатюры, доступ к выбранным миниатюрам можно получить с помощью свойства
WpfThumbnailViewer.SelectedThumbnails.
Свойство
WpfThumbnailViewer.MultiSelect позволяет указать, что можно выбрать несколько миниатюр.
Перетаскивание миниатюр в просмотрщике миниатюр
WpfThumbnailViewer позволяет перетаскивать миниатюры. Чтобы перетащить миниатюру, просто наведите на нее курсор, зажмите левую кнопку мыши и перетащите курсор в нужное положение.
Функция перетаскивания может быть включена/отключена с помощью свойств WpfThumbnailViewer.AllowDrop или
WpfThumbnailViewer.AllowDrag.