Ресурсы образа wpf и изменение изображения в элементе управления wpf во время выполнения
Я хотел бы точно знать, как динамически использовать ресурс словаря в коде C# - т.е. я хотел бы загружать изображения во время выполнения из ресурса изображения в словаре
У меня есть программа, которая имеет 3 изображения в словаре WPF - это изображения, установленные в качестве ресурсов изображений.
Затем в коде моего окна WPF я хочу загрузить любое из трех изображений на основе пользовательских событий.
Нет никакого реального кода, который я должен показать, поскольку ничего, что я сделал, работает.
Идеи?
2 ответа
Во-первых, убедитесь, что вы определили ресурсы изображения следующим образом:
<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(), чтобы найти ресурс изображения по его ключевому имени (значение атрибута x:Key в ImageSource в словаре ресурсов) следующим образом:
imageControl.Source = (ImageSource)FindResource("image1");
Надеюсь это поможет!
Это дополнение к принятому ответу: при работе в 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");
Здесь WindowReference
это ссылка на My.MainWindow
,