Как изменить цвет изображения в silverlight/WP7 (Color Mask)?

У меня есть кнопка переключения с png с прозрачным фоном и черным передним планом. Если кнопка выбрана, я хочу, чтобы черный цвет изображения изменился на цвет, выбранный пользователем. Есть ли способ сделать это в Silverlight и/или wp7?

Итак, например:

<ToggleButton>
    <Image Source="MyImage.png" />
</ToggleButton>

MyImage.png имеет прозрачный фон и черный передний план. Предпочтительный цвет пользователя - красный. Когда кнопка переключается, я хочу, чтобы черный передний план изображения стал красным.

Ответ 1

Я бы попробовал подход OpacityMask. В основном это должно выглядеть примерно так:

<Rectangle Fill="Red">
  <Rectangle.OpacityMask>
    <ImageBrush ImageSource="MyImage.png"/>
  </Rectangle.OpacityMask>
</Rectangle>

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

Ответ 2

Сколько элементов управления имеет пользователь по цвету?

Если они выбирают из ограниченного набора (например, красного, зеленого, синего, черного, коричневого), то самым простым способом было бы привязать источник изображения к переменной, которая содержит имя изображения, а затем изменить имя сохраняется в этой переменной.

Если они могут выбрать любой цвет, то вам нужно сделать некоторую обработку изображения, чтобы изменить черные пиксели опорного изображения выбранного цвета, пишет, что в изолированное хранилище, а затем связать источник изображения для этого нового файла.Р >

Другой альтернативой является нарисовать кнопку в XAML, а затем вы можете напрямую управлять цветом переднего плана. Эта страница MSDN описывает основы рисования. Вы можете использовать те же команды для определения изображения на кнопке, как описано в этой странице из блога Скотта Гуга:

image of code from blog

(это образ кода из блога).

Если вы привязываете цвет к переменной, пользователь может изменить цвет изображения. Он полагается на то, что вы можете рисовать изображение в XAML, хотя.