你應該在你的viewmodel(播放/停止)中定義播放狀態,並使用轉換器將Button.Style綁定到該屬性。在您的轉換器中,根據當前狀態返回不同的樣式(取自App.Current.Resources)。
編輯:
這是你的轉換器的例子應該是這樣的:
public class StateStyleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return (PlaybackState)value == PlaybackState.Playing ? App.Current.Resources["RoundPlay"] : App.Current.Resources["RoundStop"];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
在這個例子中,PlaybackState是一個枚舉:
public enum PlaybackState
{
Playing,
Stopped
}
那麼你應該加入state屬性添加到您的視圖模型(您通知更改的部分取決於您用於MVVM的框架):
private PlaybackState state;
public PlaybackState State
{
get { return state; }
set
{
state = value;
RaiseNotifyPropertyChanged("State");
}
}
聲明你的轉換器在XAML:
<UserControl.Resources>
<converters:StateStyleConverter x:Key="StateStyleConverter"/>
</UserControl.Resources>
最後將其綁定到該按鈕:
<Button Width="72" Height="72" Style="{Binding State, Converter={StaticResource StateStyleConverter}}"
DataContext="{Binding ElementName=this, Path=DataContext}"
cmd:ButtonBaseExtensions.Command="{Binding PlayStopCommand}"
/>
來源
2011-08-19 15:09:23
alf
謝謝。如果你碰到一個例子,說明如何在演示項目中實現這個功能,請下載像這樣的下載。謝謝。 –
不客氣!我編輯了這個問題,並附上了一個關於如何做到這一點的例子。希望能幫助到你。 – alf
現在它清澈透明。謝謝! –