我想知道如何在后面的C#代码中动态使用字典资源 - 即..我想在运行时从字典中的图像资源加载图像
我有一个程序在WPF字典中有3个图像 - 这些是设置为图像资源的图像。
然后在我的WPF窗口后面的代码中,我想根据用户发起的事件加载三个图像中的任何一个。
没有真正的代码我必须展示,因为我没有做过任何工作。
想法?
答案 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
的引用。