Я занимаюсь разработкой приложения Silverlight и пытаюсь придерживаться принципов MVVM, но сталкиваюсь с некоторыми проблемами при изменении источника изображения на основе состояния свойства в ViewModel. Для всех намерений и целей вы можете думать о функциональности, которую я реализую, как кнопку воспроизведения / паузы для аудио-приложения. В режиме «Воспроизведение» IsActive имеет значение true во ViewModel, и на кнопке должно отображаться изображение «Pause.png». Когда пауза, IsActive имеет значение false в ViewModel и «Play.png» отображается на кнопке. Естественно, есть два дополнительных изображения для обработки, когда мышь наводит курсор на кнопку.
Я думал, что смогу использовать Style Trigger , но, очевидно, они не поддерживаются в Silverlight. Я просматривал сообщение на форуме с вопросом, похожим на мой, где предлагается использовать VisualStateManager . Хотя это может помочь с изменением изображения для парящих / нормальных состояний, отсутствует часть (или я не понимаю), как это будет работать с состоянием, установленным через модель представления. Кажется, что пост относится только к событиям, а не к свойствам модели представления. Сказав это, я также не успешно выполнил обычные / парящие эффекты.
Ниже мой Silverlight 4 XAML. Также следует отметить, что я работаю с MVVM Light.
<UserControl x:Class="Foo.Bar.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="200">
<UserControl.Resources>
<Style x:Key="MyButtonStyle" TargetType="Button">
<Setter Property="IsEnabled" Value="true"/>
<Setter Property="IsTabStop" Value="true"/>
<Setter Property="Background" Value="#FFA9A9A9"/>
<Setter Property="Foreground" Value="#FF000000"/>
<Setter Property="MinWidth" Value="5"/>
<Setter Property="MinHeight" Value="5"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Image Source="/Foo.Bar;component/Resources/Icons/Bar/Play.png">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="Active">
<VisualState x:Name="MouseOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Source" Storyboard.TargetName="/Foo.Bar;component/Resources/Icons/Bar/Play_Hover.png" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Image>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Button Style="{StaticResource MyButtonStyle}" Command="{Binding ChangeStatus}" Height="30" Width="30" />
</Grid>
</UserControl>
Как правильно обновлять изображения на кнопках в состоянии, определяемом моделью вида?