Привет, во-первых, спасибо за любую помощь в указании меня в правильном направлении. У меня есть приложение в WPF, которое начинает вызывать у меня проблемы. Я в порядке с основами, но теперь я углубляюсь в это, становится все сложнее, и я не уверен, что это недостаток знаний или ограничение XAML.
В моем приложении есть RadioButtons, и я использую для этого стиль, чтобы вернуть их как ToggleButtons, используя свойство BasedOn.
Все это прекрасно, в этот стиль включена информация о стиле и триггерные события для OnClick и мыши, над которыми переопределяются действия по умолчанию.
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу иметь возможность менять содержимое (изображение значка), когда переключатель IsChecked.
Для этого я не могу жестко закодировать изображение в стиле, и я не хочу помещать всю эту информацию о стиле для OnClick, MouseOver и т. д. в каждую кнопку.
Я попытался добавить дополнительный стиль в сам RadioButton и основываясь на стиле, который я сейчас использую, но код для этого не обновляет содержимое (изображение значка). Единственный пример, который я могу найти, - это шаблон элемента управления, если я установлю границу внутри шаблона OnChecked, она отобразит границу, но я не уверен, что использую правильное свойство для изменения содержимого переключателя.
Родительский стиль со всеми триггерами выглядит так
<Style x:Key="RadioBtnToolStyle" BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="{x:Type RadioButton}">
<Setter Property="Background" Value="{x:Null}" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="Foreground" Value="{x:Null}" />
<Setter Property="Padding" Value="0" />
<Setter Property="Margin" Value="3" />
<Setter Property="BorderBrush" Value="{x:Null}" />
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform CenterX="30" CenterY="30" ScaleX="1" ScaleY="1" />
</Setter.Value>
</Setter>
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Border Name="border" BorderThickness="0" BorderBrush="Black" Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value="0.8" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation From="1" To="0.8" RepeatBehavior="Forever" AutoReverse="True" Duration="00:00:00.6" Storyboard.TargetProperty="RenderTransform.ScaleX" />
<DoubleAnimation From="1" To="0.8" RepeatBehavior="Forever" AutoReverse="True" Duration="00:00:00.6" Storyboard.TargetProperty="RenderTransform.ScaleY" />
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation To="1" Duration="00:00:00.6" Storyboard.TargetProperty="RenderTransform.ScaleX" />
<DoubleAnimation To="1" Duration="00:00:00.6" Storyboard.TargetProperty="RenderTransform.ScaleY" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
И моя кнопка с моим добавленным стилем в настоящее время выглядит так
<RadioButton GroupName="Tools" Grid.Row="0" Content="{StaticResource BrightnessContrast}" IsChecked="{Binding IsBrightnessAndContrastEnabled}">
<RadioButton.Style>
<Style TargetType="RadioButton" BasedOn="{StaticResource RadioBtnToolStyle}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<ContentPresenter Content="{StaticResource BrightnessContrast}" HorizontalAlignment="Center" VerticalAlignment="Center" />
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="{StaticResource InvertImageBtn}" />
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content" Value="{StaticResource LogoFooterBackgroundStyle}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</RadioButton.Style>
</RadioButton>
Я видел один или два примера использования Events, но до сих пор мне удавалось избегать написания чего-либо в моем коде и содержать все это в моей ViewModel, поэтому, если есть способ сделать это в XAMl, это было бы идеально.
Извините, если я объяснил это плохо, и еще раз спасибо за любую помощь.