[WPF] Как обесцветить векторную графику?
От: EqKeeper  
Дата: 06.08.11 16:07
Оценка:
Доброго времени суток!

Намучившись с растровыми изображениями и начитавшись всяких ужасов об их отображении в WPF, я решил перебраться на векторную графику... и с порога столкнулся со следующей задачкой:
Есть ToggleButton. Если она нажата, я хочу, чтобы на ней отображалась одна иконка. Если отжата — другая. Иконки, как уже было помянуто, векторные.

Нарисовал и применил такой вот шаблон:

<ControlTemplate x:Key="saveSettingsButton" TargetType="{x:Type ToggleButton}">
            <ContentPresenter x:Name="image" Content="{StaticResource SaveGrayscaleIcon}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}" />
            <ControlTemplate.Triggers>
                <Trigger Property="IsChecked" Value="true">
                    <Setter TargetName="image" Property="Content" Value="{StaticResource SaveIcon}"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>


Иконки получены путем сохранения SVG'шных в XAML при помощи Inkscape.

Храню в словаре в таком вот виде:
<Viewbox x:Key="SaveIcon" Stretch="Uniform">
        <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Width="48" Height="48">
            <Canvas.Resources>
                <RadialGradientBrush xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Key="radialGradient6719" MappingMode="Absolute" Center="605.71429,486.64789" GradientOrigin="605.71429,486.64789" RadiusX="117.14286" RadiusY="117.14286">
                    <RadialGradientBrush.GradientStops>
...


И все бы было ничего, но:
1) В данном варианте я имею 2 иконки — цветную и чернобелую. Обе занимают место и время загрузки. В перспективе кнопок значительно больше. Да и обесцвечивать вручную каждую иконку откровенно лениво.
2) Почему-то, ведет себя эта конструкция очень странно. При изменении состояния одной кнопки, исчезает другая. Если кнопок несколько — исчезают по одной-несколько в произвольном порядке. Аттрибут x:Shared="false" для Viewbox'а не помогает. =\

Подскажите, гуру, как быть в такой ситуации? Что делать? Хочется и корректного переключения, и смены палитры на серую "на лету".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.