2010-11-03 13 views
1

J'ai un DataGrid dans un UserControl et j'ai ajouté un ContextMenu au DataGrid.Problème de réglage Source d'image d'icône dans le menu contextuel du code derrière

Le XAML est la suivante:

<sdk:DataGrid ItemsSource="{Binding Path=GridSource}"> 
    <sdk:DataGrid.Columns> 
     <sdk:DataGridTextColumn Binding="{Binding Path=Name, Mode=OneWay}" Header="Name"/> 
     <sdk:DataGridTextColumn Binding="{Binding Path=Number, Mode=OneWay}" Header="Number"/> 
    </sdk:DataGrid.Columns> 
    <toolkit:ContextMenuService.ContextMenu> 
     <toolkit:ContextMenu Opened="ContextMenu_Opened"> 
      <toolkit:MenuItem IsEnabled="False"> 
       <toolkit:MenuItem.Icon> 
        <Image x:Name="menuIcon"/> 
       </toolkit:MenuItem.Icon> 
      </toolkit:MenuItem> 
      <toolkit:Separator /> 
      <toolkit:MenuItem Header="View Agent Route" Click="AgentRoute_Click"/> 
      <toolkit:MenuItem Header="Live Track" Click="LiveTrack_Click"/> 
     </toolkit:ContextMenu> 
    </toolkit:ContextMenuService.ContextMenu> 
</sdk:DataGrid> 

Si je mets la source de l'image menuIcon en XAML en utilisant

<Image x:Name="menuIcon" Source="../../Assets/Images/user_green.png"/> 

Ensuite, l'icône est rendu bien, mais si je tente de le mettre en le gestionnaire d'événements ContextMenu_Opened utilisant:

private void ContextMenu_Opened(object sender, RoutedEventArgs e) 
{ 
    menuIcon.Source = new BitmapImage(new Uri("../../Assets/Images/user_green.png", UriKind.Relative)); 
} 

rien ne montre, je ne reçois pas une erreur ou quoi que ce soit il ju st ne montre pas. J'ai utilisé la même méthode pour définir ImageSource (en utilisant les mêmes fichiers * .png réels) ailleurs dans mon application, des idées sur ce qui se passe ici?

Est-ce dû au fait qu'il s'agit d'un ContextMenu? Sur une grille? Je ne peux pas comprendre ce qui se passe.

Répondre

2

J'ai obtenu celui-ci en utilisant un ImageSourceConverter dans l'événement contextmenu_opened.

private void ContextMenu_Opened(object sender, RoutedEventArgs e) 
{ 
    ImageSourceConverter converter = new ImageSourceConverter(); 
    menuIcon.Source = (ImageSource)converter.ConvertFromString("../../Assets/Images/user_green.png"); 
} 
2

Essayez d'utiliser: -

new Uri("/Assets/Images/user_green.png", UriKind.Relative") 

En règle générale, je voudrais éviter « .. » chemins parents, si possible, ils ne causent que des maux de tête. Vous savez qu'il y a un dossier Assets à la racine du Xap alors commencez par "/ Assets" et allez à partir de là.

+0

J'ai essayé cela mais ça ne fonctionne toujours pas. Pouvez-vous penser à une raison pour laquelle cela fonctionne quand vous utilisez XAML, mais pas à travers le code? – Fermin

2

Vous devez transmettre une image. Cela a fonctionné pour moi:

var mus = new MenuItem { 
Header = "Unicorns...", 
Icon = new Image { 
Source = new BitmapImage(new Uri("/myApp;component/img/unicorns.png",UriKind.Relative)) 
} 
};