2013-09-04 17 views
8

Ich habe diese ResourceDictionary in Main.xaml:Wie Bildquelle in C# zu XAML statische Ressource programmgesteuert festgelegt?

<Window.Resources> 
    <ResourceDictionary> 
     <BitmapImage x:Key="Customer" UriSource="Icons/customer.png"/> 
     <BitmapImage x:Key="Project" UriSource="Icons/project.png"/> 
     <BitmapImage x:Key="Task" UriSource="Icons/task.png"/> 
    </ResourceDictionary> 
</Window.Resources> 

Ich stellte zunächst das Bild mit:

<Image Name="TypeIcon" HorizontalAlignment="Left" VerticalAlignment="Center" 
    Source="{StaticResource Customer}" Height="16" Width="16"/> 

Ich versuche TypeIcon ‚s Source von Kunden-Projekt in ein zu ändern C# -Methode.

Ich habe versucht, mit:

TypeIcon.Source = "{StaticResource Project}"; 

Aber ich bekomme diese Fehlermeldung:

Cannot implicitly convert type string to System.Windows.Media.ImageSource

Ich habe versucht, Definieren Sie das Bild mit new ImageSource(), aber das funktioniert auch nicht.

Wie kann ich das Bild Source programmgesteuert in C# ändern?

Antwort

14

Nach vielen googeln, während dieser Frage zu schreiben, habe ich herausgefunden, wie es geht:

TypeIcon.Source = (ImageSource) Resources["Project"]; 
2

Sie die ImageSourceConverter Klasse verwenden können, um zu bekommen, was Sie wollen, zum Beispiel:

img1.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("/Assets/check.png"); 
+1

Der' Media' Namespace ist nicht verfügbar setzen System.Windows.Media.ImageSourceConverter' –

9

Es ist nicht für statische Ressourcen, aber vielleicht wird es sowieso nützlich sein ... :)

dh wie Hintergrund für Grid dynamisch

var myBrush = new ImageBrush(); 
      var image = new Image 
          { 
           Source = new BitmapImage(
            new Uri(
             "pack://application:,,,/YourAppName;component/Images/Boo.png")) 
          }; 
myBrush.ImageSource = image.Source; 
MainGrid.Background = myBrush; 

das heißt, wie Symbol der App

dynamisch für universelle Anwendungen `
var idleIco = new Image 
      { 
       Source = new BitmapImage(
        new Uri(
         "pack://application:,,,/YourAppName;component/Images/idle.ico")) 
      }; 
SomeObjectYouAreUsingToSet.IconSource =idleIco.Source;