2009-06-02 125 views
10

我想知道如何動態地使用字典資源在後面的C#代碼 - 即..我想在運行時從圖像資源詞典wpf圖像資源和運行時在wpf控制中更改圖像

我有一個程序,在WPF詞典中有3個圖像 - 這些圖像設置爲圖像資源。

然後在我的WPF窗口後面的代碼中,我想根據用戶啓動的事件加載三個圖像中的任何一個。

有沒有真正的代碼,我必須顯示,因爲我沒有做的工作。

想法?

回答

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中定義的,則跳過此步驟)。在你的窗口的XAML文件,確保您有這樣的事情:現在

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

,在你的後臺代碼,你可以使用FindResource()方法來定位你的圖像資源通過它的鍵名(價值資源字典中ImageSource的x:Key屬性)如下:

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

希望這有助於!

+0

啊,我錯過的是我的字典合併到Window.Resources - 非常感謝! – Tab 2009-06-03 15:27:34

1

這是一個除了the accepted answer: 當ViewModel內MVVM工作,確保從出增加了資源目錄視圖中使用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參考。