2010-04-12 5 views
0

Je me fâche vraiment depuis 2 jours avec un problème stupide. J'ai déjà posé la question ici mais j'ai l'impression que ma question est perdue là où personne ne la verra à nouveau. Voici donc mon problème simple:WPF CustomControl et Image binding

J'ai un projet contenant un CustomControl (un projet de bibliothèque), ce code de contrôle personnalisé est hérité du contrôle Window. Donc, il a hérité d'une propriété Icon. Dans le code XAML pour créer la conception de contrôle, quelque part dans mon ResourceDictionary je veux placer une image liée à la propriété Icon.

...  
<Image Grid.Column="0" Margin="3" Width="27" Height="27" Source="{Binding Icon}" /> 
... 

J'ai alors un deuxième projet (un projet d'application WPF) faisant référence mon premier et en utilisant cette fenêtre de contrôle personnalisé, où je mis la propriété Icône. L'icône Propriété est correctement définie parce que je peux voir l'icône dans la barre des tâches, mais l'image n'apparaît pas, semble que ma liaison ne fonctionne pas.

<SILU:FlatForm x:Class="SILU_MovieManager.WinMain" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:SILU="clr-namespace:SILU_Controls;assembly=SILU_Controls" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="SILU Movie Manager" Height="425" Width="682" Loaded="FlatForm_Loaded" Icon="/SILU_MovieManager;component/Resources/Images/Film.ico"> 
    <Grid> 

    </Grid> 
</SILU:FlatForm> 

Je ne sais vraiment pas comment lier cela, voici une solution que je suis arrivé ici, mais il ne fonctionne pas pour moi. (Solution)

Répondre

0

Je n'ai pas essayé cette solution, ce qui fait par code et pour les icônes

<Window x:Class="WPFWindowAPP.IconLoader" 

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

Title="WPFWindowAPP" Height="164" Width="405" 

> 

<Canvas> 


    <Button Name="btn" Click="btnClick" Canvas.Top="40" Canvas.Right="90" Width="75">Load Icon</Button> 

    <Image Name="icoDisplay" Canvas.Left="10" Canvas.Top="80" Stretch="None" /> 

</Canvas> 

void btnClick(object sender, RoutedEventArgs e)  { 

iconImage ico = IconImage.ExtractAssociatedIcon (filePath.Text); Bitmap bmp = ico.ToBitmap(); MemoryStream strm = new MemoryStream(); bmp.Save (strm, System.Drawing.Imaging.ImageFormat.Png);
BitmapImage bmpImage = new BitmapImage();
bmpImage.BeginInit();
strm.Seek (0, SeekOrigin.Begin); bmpImage.StreamSource = strm; bmpImage.EndInit();
icoDisplay.Source = bmpImage; }

+0

Ceci est fait avec un chemin de fichier, mon icône est une ressource de l'application WPF, je ne peux pas appliquer cette méthode (je pense). – Karnalta

+0

J'ai trouvé une solution, mais je ne sais pas ce qui va suivre votre cas, mais de toute façon essayer ceci. Ajoutez l'icône au projet en tant que ressource (ressource non intégrée, il y a une différence), puis accédez-y comme ceci en utilisant (Stream stream = Application.GetResourceStream (new Uri ("\\ comment.ico", UriKind.RelativeOrAbsolute)). Stream) {Décodeur BitmapDecoder = IconBitmapDecoder.Create (flux, BitmapCreateOptions.None, BitmapCacheOption.None); BitmapSource source = decoder.Frames [0]; this.test.Source = source; } –

+0

Merci mais je suis dans une bibliothèque de contrôle personnalisé, je ne peux pas faire de déclaration comme this.MyImage.Source. J'ai une classe héritée de la classe Window et un ResourceDictionary où je définis le style de contrôle comme