РЕДАКТИРОВАТЬ:
Может быть, я слишком усложняю, пытаясь поменять стили, так как на самом деле единственное, что я хочу, это иметь возможность использовать различные фоновые изображения в зависимости от состояния логического свойства,Вопрос должен быть больше ... Как я могу использовать фоновое изображение для кнопки на основе состояния логического свойства?
У меня есть два стиля, которые анимируют и меняют изображения, когдана кнопке наведен указатель мыши, стили работают нормально, но я хочу иметь возможность использовать один из стилей в зависимости от состояния логического свойства.Что-то вроде ... If property equals true, use style1 otherwise use style2
.
Вот мой код:
Анимации:
<Storyboard x:Key="MouseOverStoryboard" Duration="00:00:00.5">
<DoubleAnimation Storyboard.TargetName="image1" Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:00.3" />
<DoubleAnimation Storyboard.TargetName="image2" Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:00.3" />
</Storyboard>
<Storyboard x:Key="MouseLeaveStoryboard" Duration="00:00:00.5">
<DoubleAnimation Storyboard.TargetName="image1" Storyboard.TargetProperty="Opacity" To="1" Duration="00:00:00.3" />
<DoubleAnimation Storyboard.TargetName="image2" Storyboard.TargetProperty="Opacity" To="0" Duration="00:00:00.3" />
</Storyboard>
Style1:
<Style x:Key="Style1"
TargetType="{x:Type Button}">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image x:Name="image1" Source="Images/image.png" Stretch="None" />
<Image x:Name="image2" Source="Images/image-hover.png" Stretch="None" Opacity="0" />
<ContentPresenter />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Trigger.EnterActions>
<StopStoryboard BeginStoryboardName="MouseLeaveStoryboard" />
<BeginStoryboard Name="MouseOverStoryboard"
Storyboard="{StaticResource MouseOverStoryboard}" />
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="MouseOverStoryboard" />
<BeginStoryboard Name="MouseLeaveStoryboard"
Storyboard="{StaticResource MouseLeaveStoryboard}" />
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
Style2:
<Style x:Key="Style2"
TargetType="{x:Type Button}">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Image x:Name="image1" Source="Images/image2.png" Stretch="None" />
<Image x:Name="image2" Source="Images/image-hover2.png" Stretch="None" Opacity="0" />
<ContentPresenter />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Trigger.EnterActions>
<StopStoryboard BeginStoryboardName="MouseLeaveStoryboard" />
<BeginStoryboard Name="MouseOverStoryboard"
Storyboard="{StaticResource MouseOverStoryboard}" />
</Trigger.EnterActions>
<Trigger.ExitActions>
<StopStoryboard BeginStoryboardName="MouseOverStoryboard" />
<BeginStoryboard Name="MouseLeaveStoryboard"
Storyboard="{StaticResource MouseLeaveStoryboard}" />
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
Применение стилей
<Button x:Name="MyButton"
Command="{Binding ButtonCommand}">
<Button.Style>
<Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}">
<Style.Triggers>
<DataTrigger Binding="{Binding SomeBooleanProperty}" Value="True">
<Setter Property="Style" Value="{StaticResource Style1}" />
</DataTrigger>
<DataTrigger Binding="{Binding SomeBooleanProperty}" Value="True">
<Setter Property="Style" Value="{StaticResource Style2}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
Сообщение об ошибке:
Объект стиля не может влиять на свойство Style объекта, для которогоэто относится.
Что мне не хватает?