Вы также можете достичь этого без пользовательского контроля, например:
<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>
Где:
<Converters:BooleanToVisibilityConverter x:Key="visConverter"/>
И определено BooleanToVisibilityConverter как это:
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));
}
}
Надеюсь, это поможет!