2009-09-14 7 views
0

J'ai une application WPF et j'ai ajouté aux ressources du projet de nombreuses icônes et bitmaps.Comment attacher des propriétés (à travers l'infrastructure .NET ou autre)

Maintenant, je peux y accéder comme ceci:

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

Pour l'utiliser dans WPF je créé trop simples méthodes d'extension qui les convertissent au type 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 

Je peux donc utiliser de cette façon:

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

En jetant un oeil à MyWpfExtensions.vb me révèle qu'il y a peu de Micr Les infrastractures d'osoft qui permettent le codage non officiel et voici ma question aux experts de vous.

Je voudrais avoir pour chaque ressource de type System.Drawing.Bitmap/Icon une propriété supplémentaire (ou redéfinie) qui renvoie l'image via l'ex. méthode donc je ne dois pas utiliser un convertisseur dans le Xaml, mais l'utiliser directement.

Je cherche quelque chose comme Microsoft.VisualBasic.MyGroupCollectionAttribute.

Toutes les idées ...

Répondre

0

Je suppose qu'il n'y a pas d'autre moyen, mais un convertisseur si nous allons l'afficher:

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 
Questions connexes