Ресурсы изображения wpf и изменение изображения в режиме wpf во время выполнения
Я хотел бы точно знать, как динамически использовать ресурс словаря в коде С# позади - то есть.. Я хотел бы загружать изображения во время выполнения из ресурса изображения в словаре
У меня есть программа, которая имеет 3 изображения в словаре WPF - это изображения, установленные как ресурсы изображений.
Затем в коде моего окна WPF я хочу загрузить любое из трех изображений на основе инициированных пользователем событий.
Нет никакого реального кода, который я должен показать, поскольку ничего, что я сделал, работает.
Идеи?
Ответы
Ответ 1
Сначала убедитесь, что вы определили свои ресурсы изображения следующим образом:
<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");
Надеюсь, это поможет!
Ответ 2
Это дополнение к принятому ответу:
При работе в 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
.