Конвертировать WPF BitmapSource в значок для окна - PullRequest
2 голосов
/ 22 марта 2010

У меня есть файл 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 ]

0 голосов
/ 05 апреля 2010

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

0 голосов
/ 22 марта 2010

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

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

...