Конвертировать WPF BitmapSource в значок для окна

У меня есть файл размером 16x16 .png, который я загрузил как ImageSource (BitmapSource), и он отлично работает, когда я использую его для Image в заголовке tabcontrol.

Теперь я хочу использовать это же изображение в плавающем окне (унаследованном от класса окна WPF), когда пользователь перетаскивает вкладку документа. (Это AvalonDock, который я настроил, чтобы разрешить изображения в заголовке вкладки)

После многих поисков в Интернете я понимаю, что Window.Icon требует BitmapFrame, но весь пример кода, кажется, предполагает, что файл.ico доступен, чего нет в моем случае.

Я пробовал следующий код (плюс варианты, включая клонирование, замораживание и т. Д.):

var image = (Image) content.Icon;
var bitmapSource = (BitmapSource) image.Source;

Icon = BitmapFrame.Create(bitmapSource);

но когда вызывается метод Show(), генерируется исключение: "было сгенерировано исключение типа System.ExecutionEngineException".

Как я могу создать совместимое растровое изображение на лету, чтобы окно могло отображать значок?

2 ответа

Оказывается, что BitmapFrame.Create был правильным. Просто нужно передать Uri, а не существующий BitmapSource.

Вам нужно иметь возможность загружать изображение динамически, или вы будете использовать один и тот же значок все время?

Если изображение не определено во время выполнения, вы всегда можете просто преобразовать изображение вручную, чтобы создать.ico-файл, используя Microangelo или что-то подобное. Очевидно, это не поможет, если вам действительно нужно создать значок на лету.

Другие вопросы по тегам