You can also achieve this without special controls, for example:
<ToggleButton x:Name="PlayButton" IsChecked="{Binding Path=IsPlayChecked, Mode=TwoWay}" Width="30" Height="30" Style="{StaticResource ToggleButtonStyle}"> <ToggleButton.Content> <Grid Margin="3"> <Grid Visibility="{Binding ElementName=PlayButton, Path=IsChecked, Converter={StaticResource visConverter}, ConverterParameter=Invert}" Margin="0"> <Image Source="../Resources/play_normal.png"></Image> <Image Source="../Resources/play_hover.png" Visibility="{Binding ElementName=PlayButton, Path=IsMouseOver, Converter={StaticResource visConverter}}"></Image> <Image Source="../Resources/play_hit.png" Visibility="{Binding ElementName=PlayButton, Path=IsPressed, Converter={StaticResource visConverter}}"></Image> <Image Source="../Resources/play_disabled.png" Visibility="{Binding ElementName=PlayButton, Path=IsEnabled, Converter={StaticResource visConverter}, ConverterParameter=Invert}"></Image> </Grid> <Grid Visibility="{Binding ElementName=PlayButton, Path=IsChecked, Converter={StaticResource visConverter}}"> <Image Source="../Resources/pause_normal.png"></Image> <Image Source="../Resources/pause_hover.png" Visibility="{Binding ElementName=PlayButton, Path=IsMouseOver, Converter={StaticResource visConverter}}"></Image> <Image Source="../Resources/pause_hit.png" Visibility="{Binding ElementName=PlayButton, Path=IsPressed, Converter={StaticResource visConverter}}"></Image> <Image Source="../Resources/pause_disabled.png" Visibility="{Binding ElementName=PlayButton, Path=IsEnabled, Converter={StaticResource visConverter}, ConverterParameter=Invert}"></Image> </Grid> </Grid> </ToggleButton.Content> </ToggleButton>
Where:
<Converters:BooleanToVisibilityConverter x:Key="visConverter"/>
And defined BooleanToVisibilityConverter as follows:
public class BooleanToVisibilityConverter: IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var flag = (bool)value; if (parameter != null) flag = !flag; return (flag ? Visibility.Visible : Visibility.Collapsed); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return ((value is Visibility) && (((Visibility)value) == Visibility.Visible)); } }
Hope this helps!
source share