Я пытаюсь установить источник изображения WPF в коде. Изображение встраивается как ресурс в проект. Просматривая примеры, я пришел к следующему коду. По какой-то причине это не работает - изображение не отображается.
По отладке я вижу, что поток содержит данные изображения. Так что не так?
Assembly asm = Assembly.GetExecutingAssembly();
Stream iconStream = asm.GetManifestResourceStream("SomeImage.png");
PngBitmapDecoder iconDecoder = new PngBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
ImageSource iconSource = iconDecoder.Frames[0];
_icon.Source = iconSource;
Значок определяется примерно так: <Image x:Name="_icon" Width="16" Height="16" />
<Image Source="some_fully_qualified_path">
в XAML никогда не происходит сбой.Ответы:
После того, как у меня возникла та же проблема, что и у вас, и я немного почитал, я нашел решение - Pack URI .
Я сделал следующее в коде:
Или короче, используя другой конструктор BitmapImage:
URI разбит на части:
application:///
Путь: имя файла ресурса, который скомпилирован в ссылочную сборку. Путь должен соответствовать следующему формату:
AssemblyShortName[;Version][;PublicKey];component/Path
Три слеша после
application:
должны быть заменены запятыми:И, конечно же, убедитесь, что вы установили действие сборки для своего образа на
Resource
.источник
BitmapImage(Uri)
конструктора, что помогает избежать необходимости вызывать BeginInit и EndInit. Я добавил это здесь.Это загрузит изображение с именем «Untitled.png» в папку с именем «Images», для которой «Build Action» установлено в «Resource», в сборке под названием «WpfApplication1».
источник
var uriSource = new Uri("Images/Untitled.png", UriKind.Relative);
было бы достаточноЭто немного меньше кода и может быть сделано в одной строке.
источник
Очень просто:
Чтобы установить изображение элемента меню динамически, сделайте только следующее:
... тогда как "icon.ico" может быть расположен везде (в настоящее время он находится в каталоге 'Resources') и должен быть связан как Resource ...
источник
Вы также можете уменьшить это до одной строки. Это код, который я использовал, чтобы установить значок для моего главного окна. Предполагается, что файл .ico помечен как содержимое и копируется в выходной каталог.
источник
Самый простой способ:
источник
Ты пробовала:
источник
Это мой путь:
Использование:
источник
Вот пример, который устанавливает путь к изображению динамически (изображение, находящееся где-то на диске, а не в качестве ресурса):
Размышления о иконах ...
Сначала подумайте, что вы думаете, что свойство Icon может содержать только изображение. Но на самом деле он может содержать что угодно! Я обнаружил это случайно, когда программно попытался установить
Image
свойство непосредственно в строку с путем к изображению. В результате получилось не изображение, а фактический текст пути!Это приводит к альтернативе: не нужно создавать изображение для значка, а вместо этого использовать текст с символьным шрифтом для отображения простого «значка». В следующем примере используется шрифт Wingdings, который содержит символ «floppydisk». Этот символ действительно является символом
<
, который имеет особое значение в XAML, поэтому мы должны использовать<
вместо него закодированную версию . Это работает как мечта! Ниже показан символ дискеты в виде значка в пункте меню:источник
Если ваше изображение хранится в ResourceDictionary, вы можете сделать это только с одной строкой кода:
источник
Там также более простой способ. Если изображение загружено как ресурс в XAML, а рассматриваемый код является выделенным кодом для этого содержимого XAML:
источник
Поместите рамку в VisualBrush:
Поместите VisualBrush в GeometryDrawing
Теперь поместите GeometryDrawing в DrawingImage:
Поместите это в ваш источник изображения, и вуаля!
Вы могли бы сделать это намного проще, хотя:
И в коде:
источник
Там также более простой способ. Если изображение загружено как ресурс в XAML, а рассматриваемый код является кодовым указателем для этого XAML:
Вот словарь ресурсов для файла XAML - единственная строка, которая вас волнует, - это ImageBrush с ключом «PosterBrush» - остальная часть кода предназначена только для отображения контекста
Теперь, в коде позади, вы можете просто сделать это
источник
Как загрузить изображение из встроенных в иконки ресурсов и изображений (исправленная версия Arcturus):
Предположим, вы хотите добавить кнопку с изображением. Что вы должны сделать?
Теперь пришло время загрузить наше изображение в XAML
Готово.
источник
Я новичок в WPF, но не в .NET.
Я потратил пять часов, пытаясь добавить файл PNG в «Проект библиотеки пользовательских элементов управления WPF» в .NET 3.5 (Visual Studio 2010) и установить его в качестве фона унаследованного элемента управления.
Ничего относительного с URI не сработало. Я не могу представить, почему нет способа получить URI из файла ресурсов через IntelliSense, может быть, как:
Я перепробовал множество URI и поиграл с ResourceManager и методами GetManifest, но все они были исключениями или значениями NULL.
Здесь я добавлю код, который работал для меня:
источник
Если у вас уже есть поток и вы знаете формат, вы можете использовать что-то вроде этого:
источник
Вы просто немного пропустили.
Чтобы получить встроенный ресурс из любой сборки, вы должны указать имя сборки вместе с именем файла, как я упоминал здесь:
источник