Изменение цвета отображения PNG с прозрачностью в XAML - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть несколько PNG с прозрачностью, которые я использую для кнопок в моем приложении WPF / C #.Прямо сейчас у меня есть две версии каждого PNG, одна для обычного просмотра и одна для наведения, каждая разного цвета.Тем не менее, мне бы очень хотелось иметь только один PNG и, возможно, сделать все, что не является прозрачным белым (каждое изображение имеет один цвет, никаких деталей, кроме фигуры. Можно ли было бы затем изменить цвет каждого, используя SolidColorBrush или аналогичныйи создать версии Normal / Hover как статический ресурс в моем XAML? Примерно так:

<Image Key="BtnMenu" Source="Images/Menu.png" Fill="ButtonNormalBrush" />
<Image Key="BtnMenuHover" Source="Images/Menu.png" Fill="ButtonHoverBrush" />

Да, я полностью выдумал "Fill" ... Но основная идея в том, что у меня естьResourceDictionary, который содержит цветовую схему, которая используется во всем приложении, что позволяет мне изменять любой из примерно 6 цветов, которые я использую в приложении, в одном месте, и он обновляет каждый элемент управления, который ссылается на этот цвет ...но единственное место, где я не могу сделать это, это PNG для кнопок. (В идеале в будущем я сделаю ResourceDictionary, который можно загружать во время выполнения, чтобы приложение имело альтернативные "скины" ... но сейчас PNGне позволяй мне этого сделать).

Редактировать: BTW, если для решения требуется конвертер или что-то написанное в коде, это нормально.

Ответы [ 3 ]

0 голосов
/ 04 декабря 2011

Хмм ... Если вы создали сетку и поместили изображение в эту сетку, вы можете установить фон сетки в цвет заливки.

Редактировать: вот код:

<Button>
    <Grid Background="SkyBlue">
        <Image Source="img.png" Stretch="None" />
    </Grid>
</Button>
0 голосов
/ 23 сентября 2013

Существует решение: http://msdn.microsoft.com/ru-ru/library/ms752364.aspx Вы можете просто создать ImageSource с новым объектом Format из другого ImageSource.Объект формата определяет маску цвета для изображения.

0 голосов
/ 02 декабря 2011

Вы можете попробовать применить ShaderEffect в качестве Effect к изображению при наведении или создать расширение разметки , которое преобразует ваше изображение.Другая возможность заключалась бы в инкапсуляции такой логики в подкласс Image.

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