wpf图像资源和在运行时在wpf控件中更改图像

时间:2009-06-02 16:42:14

标签: c# wpf image dictionary resources

我想知道如何在后面的C#代码中动态使用字典资源 - 即..我想在运行时从字典中的图像资源加载图像

我有一个程序在WPF字典中有3个图像 - 这些是设置为图像资源的图像。

然后在我的WPF窗口后面的代码中,我想根据用户发起的事件加载三个图像中的任何一个。

没有真正的代码我必须展示,因为我没有做过任何工作。

想法?

2 个答案:

答案 0 :(得分: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");

希望这有帮助!

答案 1 :(得分: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"); 

此处WindowReference是对My.MainWindow的引用。