ресурсы образа wpf и изменение изображения в элементе управления wpf во время выполнения - PullRequest
10 голосов
/ 02 июня 2009

Я хотел бы точно знать, как динамически использовать ресурс словаря в коде C #, т. Е. Я хотел бы загружать изображения во время выполнения из ресурса изображения в словаре

У меня есть программа, имеющая 3 изображения в Словаре WPF - это изображения, установленные в качестве ресурсов изображений.

Затем в коде моего окна WPF я хочу загрузить любое из трех изображений на основе пользовательских событий.

Нет реального кода, который я должен показать, поскольку ничего, что я сделал, не работает.

Идеи

Ответы [ 2 ]

20 голосов
/ 03 июня 2009

Сначала убедитесь, что вы определили ресурсы для изображений следующим образом:

<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");

Надеюсь, это поможет!

1 голос
/ 12 декабря 2011

Это дополнение к принятому ответу : При работе в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...