2009-06-02 16 views
10

C#コードの背後にある辞書リソースを動的に使用する方法を正確に知りたいと思います。実行時にイメージを辞書wpfイメージリソースとwpfコントロールのイメージを実行時に変更する

私はWPF辞書に3つの画像を持つプログラムを持っています。画像は画像リソースとして設定されています。

次に、私のWPFウィンドウのコードの後ろに、ユーザーが開始したイベントに基づいて3つのイメージのいずれかをロードします。

実際のコードはありませんが、私が行ったことは何も示していません。

アイデア?

答えて

20

まず、あなたはこのようなあなたの画像リソースを定義したことを確認してください:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ImageSource x:Key="image1">images/image1.jpg</ImageSource> 
    <ImageSource x:Key="image2">images/image2.jpg</ImageSource> 
</ResourceDictionary> 

第二に、私はあなたのWPFの辞書は、独自のファイルであることを仮定しています。これで、辞書がメインウィンドウのXAMLにマージされていることを確認する必要があります(リソース辞書がウィンドウのXAMLの内部で定義されている場合は、この手順を省略してください)。 、あなたはそれがキー名(の値だことで、あなたの画像リソースを検索するにfindResource()メソッドを使用することができますコードビハインドあなたに、

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="myDictionary.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

:今、あなたのウィンドウのXAMLファイルでは、あなたがこのような何かを持っていることを確認してください次のように:

imageControl.Source = (ImageSource)FindResource("image1"); 

これはうまくいきますように、リソース辞書内のImageSourceのx:Key属性。

+0

ああ、私が見逃していたのは、私の辞書のWindowへの統合でした。 – Tab

+0

すばらしい回答です。 +1してありがとう!ブラウジングMSDNは、そのようなシナリオの痛みです – Gishu

+0

名誉 - 短い甘いと非常に正確 –

1

これはthe accepted answerに追加された: MVVMからViewModel内で作業する場合、リソースディレクトリが追加されたビューからFindResourceを使用してください。

<Window x:Class="My.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:ViewModels="clr-namespace:My.ViewModels" 
     Title="USA Hockey Player Evaluation tool" 
     Icon="/USAHockeyPlayerEval;component/View/Images/HET.ico" 
     SizeToContent="WidthAndHeight" 
     MinHeight="500px" MinWidth="800px"> 
    <Window.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Images.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Window.Resources> 
    <Window.DataContext> 
     <ViewModels:MainWindowMV/> 
    </Window.DataContext> 
    <StackPanel> 
     <Menu> 
      <MenuItem Header="File"> 
       <MenuItem Header="Save"></MenuItem> 

この場合、私の見解では、ウィンドウ(私が正しいMVVMを知らない;-))

Image img = new Image();          
img.Source = (ImageSource)WindowReference.FindResource("Pluse"); 

ここWindowReferenceMy.MainWindowへの参照であるです。

関連する問題