Как прикрепить свойства (через инфраструктуру .NET или любую другую) - PullRequest
0 голосов
/ 14 сентября 2009

У меня есть приложение WPF, и я добавил в ресурсы проекта множество значков и растровых изображений.

Теперь я могу получить к ним доступ так:

Dim ico As System.Drawing.Icon = My.Resources.Icon 'Icon.ico
Dim img As System.Drawing.Bitmap = My.Resources.Image 'Image.png

Чтобы использовать его в wpf, я создал слишком простые методы расширения, которые преобразуют их в тип ImageSource:

'...Imports System.Drawing
'...Imports System.Windows.Interop.Imaging
<Extension()> _
Public Function ToImageSource(ByVal icon As Icon) As BitmapSource
    Return CreateBitmapSourceFromHIcon(icon.Handle, Int32Rect.Empty, _
        BitmapSizeOptions.FromEmptyOptions)
End Function

<Extension()> _
Public Function ToImageSource(ByVal image As Bitmap) As BitmapSource
    Return CreateBitmapSourceFromHBitmap(image.GetHbitmap(), IntPtr.Zero, _
        Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions)
End Function

Так что я могу использовать это так:

Dim i As New Image With {.Source = My.Resources.Image.ToImageSource}

Взглянув на MyWpfExtensions.vb, я обнаружил, что существует несколько инфраструктур Microsoft, допускающих неофициальное кодирование, и вот мой вопрос к вашим экспертам.

Я хотел бы иметь для каждого ресурса типа System.Drawing.Bitmap / Icon дополнительное (или переопределенное) свойство, которое возвращает изображение через ex. метод, поэтому мне не нужно использовать конвертер в Xaml, но использовать его напрямую.

Я на самом деле ищу что-то вроде Microsoft.VisualBasic.MyGroupCollectionAttribute.

Есть идеи? ...

1 Ответ

0 голосов
/ 14 сентября 2009

Я думаю, что нет другого пути, кроме конвертера, поэтому давайте разместим его:

Imports System.Drawing
Namespace Converters
    <ValueConversion(GetType(MarshalByRefObject), GetType(BitmapSource))> _
    Public Class ImageSourceConverter : Implements IValueConverter
        Public Function Convert(value As Object, targetType As Type, 
        parameter As Object,
        culture As System.Globalization.CultureInfo) As Object
        Implements System.Windows.Data.IValueConverter.Convert
            Dim imageSource As ImageSource = Nothing
            Dim type = value.GetType
            If type.Equals(GetType(Icon)) Then
                imageSource = DirectCast(value, Icon).ToImageSource
            ElseIf type.Equals(GetType(Bitmap)) Then
                imageSource = DirectCast(value, Bitmap).ToImageSource
            End If

            Return imageSource
        End Function

        Public Function ConvertBack(value As Object, targetType As Type,
        parameter As Object,
        culture As System.Globalization.CultureInfo) As Object Implements
        System.Windows.Data.IValueConverter.ConvertBack
            Throw New NotSupportedException
        End Function
    End Class
End Namespace
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...