Je veux faire un bouton personnalisé en utilisant wpf. Le bouton sera utilisé pour contrôler un mediaplayer. le type (lecture, arrêt, pause, ...) du bouton est spécifiée en utilisant une énumérationcontrôle de bouton personnalisé WPF
namespace vgtunesWPF
{
public class MediaButton : Button
{
[Browsable(true)]
public Button_Type ButtonType
{
get { return (Button_Type)GetValue(ButtonTypeProperty); }
set { SetValue(ButtonTypeProperty, value); }
}
public static readonly DependencyProperty ButtonTypeProperty = DependencyProperty.Register("ButtonType", typeof(Button_Type), typeof(MediaButton), new FrameworkPropertyMetadata(Button_Type.stop, FrameworkPropertyMetadataOptions.AffectsRender, ImageSourceChanged));
static MediaButton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MediaButton), new FrameworkPropertyMetadata(typeof(MediaButton)));
}
private static void ImageSourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
Application.GetResourceStream(new Uri("pack://application:,,," + (string) e.NewValue));
}
}
public enum Button_Type
{
play = 0,
pause = 1,
stop = 2,
forward = 3,
backward = 4
}
public class ButtonTypeConverter : IValueConverter
{
public object Convert(object value, Type TargetType, object Parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
Button_Type type = (Button_Type)value;
switch (type)
{
case Button_Type.play:
return new BitmapImage(new Uri("/vgtunesWPF;component/Images/Play.png",UriKind.Relative));
case Button_Type.stop:
return new BitmapImage(new Uri("/vgtunesWPF;component/Images/Stop.png",UriKind.Relative));
default:
break;
}
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
Afin de convertir ButtonType à l'image de droite i créé un convertisseur. alors le XAML:
<Style TargetType="{x:Type local:MediaButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MediaButton}">
<Canvas Width="30" Height="30">
<Canvas.Resources>
<local:ButtonTypeConverter x:Key="Converter"/>
</Canvas.Resources>
<Image Name="Normal" Source="{Binding Source={StaticResource Converter}, Converter={StaticResource Converter},Path=}" />
<Image Name="Disabled" Visibility="Hidden" Source="/vgtunesWPF;component/Images/PlayDisabled.png"/>
</Canvas>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="Normal" Property="Visibility" Value="Visible"/>
<Setter TargetName="Normal" Property="Effect">
<Setter.Value>
<DropShadowEffect Color="AliceBlue" ShadowDepth="0" BlurRadius="15" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter TargetName="Normal" Property="Visibility" Value="Hidden"/>
<Setter TargetName="Disabled" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Le problème ici est que je veux lier ButtonType à l'image normale, mais je ne peux pas comprendre comment. Je ne peux pas obtenir ButtonType accessible dans le xaml
merci mais ce n'est pas ça, pour une raison quelconque ButtonType n'est pas accessible en XAML –