J'ai un problème avec les boutons dans WPF.
Je développe une interface graphique qui a beaucoup de pages et de boutons relatifs (> 50).
L'interface graphique est censée être utilisée avec un écran tactile, de sorte que chaque bouton n'a que deux états graphiques enfoncés et normaux (il n'y a pas d'état stationnaire), comme n'importe quel bouton d'une application smartphone.
Actuellement, je suis en utilisant cette solution ici:C# WPF - Problèmes de deux états. (Cliquez sur l'événement avec l'écran tactile)
ressources fichier
<Application.Resources>
<Style x:Key="flatButtonStyle" TargetType="Button">
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Name="border"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Left" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
Dans l'une de la page
<Button
Uid=".../image_up.png"
Tag=".../image_down.png"
Style="{StaticResource flatButtonStyle}"
TouchLeave="buttonImageUp"
TouchDown="buttonImageDown"
Click="clickEvent"
ClickMode="Press"
>
<Button.Background>
<ImageBrush ImageSource=".../image_up.png" Stretch="Uniform"/>
</Button.Background>
</Button>
A l'intérieur du fichier C# lié
private void buttonImageDown(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
button.Content = new Image {
Source = new BitmapImage(new Uri(button.Tag + "")),
VerticalAlignment = VerticalAlignment.Center,
Stretch = Stretch.Uniform
};
}
private void buttonImageUp(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
button.Content = new Image {
Source = new BitmapImage(new Uri(button.Uid)),
VerticalAlignment = VerticalAlignment.Center,
Stretch = Stretch.Uniform
};
}
Cette Implémentation a beaucoup de problème:
Je ne peux pas utiliser uid et Tag
réponse lente, car elle doit exécuter une fonction C# 2 fois par contact
Je dois copier la fonction C# chaque fois que je dois utiliser un bouton dans une nouvelle page
Mais le vrai problème est que je ne sais pas pourquoi le clickEvent ne se déclenchera pas quand un bouton est enfoncé, et sur certains ordinateurs le clickEvent ne fonctionne que pour les 3 premiers ~ 5 fois que seulement TouchDonw et TouchLeave fonctionnent ...
(J'utilise .NET 4.6.1 mais même comportement avec 4.5.2 et 4.7)
Je pense est possible d'éliminer le composant C# et changer l'image (source) du bouton juste avec XAML, mais je cherche un moment et je ne trouve rien.
Quelqu'un peut-il m'aider s'il vous plaît?
Essayez-vous d'émuler [ToggleButton] (https://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.togglebutton (v = vs.110) .aspx)? – icebat
Vous ne pouvez pas faire cela avec un déclencheur de style pour définir l'image? Quel est le problème avec Uid et Tag? –
@icebat oui, mais il n'est pas très efficace d'utiliser C#. – xSanciopanzax