Как программно установить источник изображения в С# на статический ресурс XAML?

У меня есть это ResourceDictionary в Main.xaml:

<Window.Resources>
    <ResourceDictionary>
        <BitmapImage x:Key="Customer" UriSource="Icons/customer.png"/>
        <BitmapImage x:Key="Project" UriSource="Icons/project.png"/>
        <BitmapImage x:Key="Task" UriSource="Icons/task.png"/>
    </ResourceDictionary>
</Window.Resources>

Я изначально установил изображение, используя:

<Image Name="TypeIcon" HorizontalAlignment="Left" VerticalAlignment="Center"
    Source="{StaticResource Customer}" Height="16" Width="16"/>

Я пытаюсь изменить Source TypeIcon с Customer на Project в методе C#.

Я пробовал использовать:

TypeIcon.Source = "{StaticResource Project}";

Но я получаю эту ошибку:

Невозможно неявно преобразовать тип string в System.Windows.Media.ImageSource

Я пытался определить изображение с помощью new ImageSource(), но это тоже не работает.

Как программно изменить Source изображения на С#?


person Danny Beckett    schedule 04.09.2013    source источник


Ответы (3)


После долгих поисков в Google, когда я писал этот вопрос, я понял, как это сделать:

TypeIcon.Source = (ImageSource) Resources["Project"];
person Danny Beckett    schedule 04.09.2013
comment
Что здесь что? Для ImageSource вам также необходимо включить использование System.Windows.Media;. Но Ресурсы по-прежнему недоступны в текущем контексте... - person Starwave; 26.07.2019

Это не для статических ресурсов, но, возможно, все равно будет полезно... :)

то есть как установить фон для сетки динамически

var myBrush = new ImageBrush();
            var image = new Image
                            {
                                Source = new BitmapImage(
                                    new Uri(
                                        "pack://application:,,,/YourAppName;component/Images/Boo.png"))
                            };
myBrush.ImageSource = image.Source;
MainGrid.Background = myBrush;

то есть как установить значок приложения динамически

var idleIco = new Image
            {
                Source = new BitmapImage(
                    new Uri(
                        "pack://application:,,,/YourAppName;component/Images/idle.ico"))
            };
SomeObjectYouAreUsingToSet.IconSource =idleIco.Source;
person DmitryBoyko    schedule 04.02.2014

Вы можете использовать класс ImageSourceConverter, чтобы получить то, что хотите, например:

img1.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("/Assets/check.png");
person Karthik Krishna Baiju    schedule 20.10.2013
comment
Пространство имен Media недоступно для универсальных приложений System.Windows.Media.ImageSourceConverter - person JP Hellemons; 13.08.2014