2009-09-14 2 views
0

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

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

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 показывает мне, что есть несколько Micr osoft infrastractures, которые допускают неофициальное кодирование, и вот мой вопрос к вашим специалистам.

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

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

Любые идеи ...

ответ

0

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

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