Доброго времени суток!
Намучившись с растровыми изображениями и начитавшись всяких ужасов об их отображении в 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'а не помогает. =\
Подскажите, гуру, как быть в такой ситуации? Что делать? Хочется и корректного переключения, и смены палитры на серую "на лету".