Ich habe ein Problem mit den Tasten in WPF.
Ich entwickle eine GUI mit vielen Seiten und relativen Schaltflächen (> 50).
Die GUI sollte mit einem Touchscreen-Display verwendet werden, so dass jede Taste nur zwei Grafikzustände hat und normal gedrückt wird (es gibt keinen deaktivierten Zustand), genau wie jede andere Taste in einer Smartphone-App.
Derzeit diese Lösung verwende ich hier:C# WPF - Probleme mit zwei Zustandsknöpfen. (Click Ereignis mit Touchscreen)
Resource File
<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>
In einer der Seite
<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>
Im Inneren des
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
};
}
Datei C# verwandt Diese Implementierung hat viele Probleme:
Ich kann nicht Uid und Tag benutzen
Langsame Reaktion, weil es hat eine C# Funktion 2 Mal pro Berührung müssen
ich die C# Funktion jedes Mal, wenn ich zu müssen kopieren laufen Verwenden Sie eine Schaltfläche in einer neuen Seite
Aber das eigentliche Problem ist, dass ich nicht weiß warum einige Zeit das ClickEvent nicht startet, wenn eine Taste gedrückt wird, und auf einem Computer funktioniert das ClickEvent nur für die ersten 3 ~ 5 mal als nur TouchDonw und TouchLeave funktionieren ...
(Ich verwende .NET 4.6.1 aber gleiches Verhalten mit 4.5.2 und 4.7)
Ich denke, bin möglich, die C# Komponente zu beseitigen und das Bild (Quelle) der Taste ändern nur mit XAML, aber ich suche nach einer Weile und ich kann nichts finden.
Kann mir bitte jemand helfen?
Versuchen Sie, [ToggleButton] (https://msdn.microsoft.com/en-us/library/system.windows.controls.primitivs.togglebutton (v = vs.110) .aspx) zu emulieren? – icebat
Sie können dies nicht mit einem Style-Auslöser tun, um das Bild einzustellen? Was ist das Problem mit Uid und Tag? –
@icebat Ja, aber es ist nicht sehr effizient, C# zu verwenden. – xSanciopanzax