J'ai un groupe de CheckBox WPF qui ont un gestionnaire d'événements Checked qui gère une certaine logique lorsque l'utilisateur clique sur l'un d'entre eux. Cependant, j'ai aussi un bouton "Effacer tout" qui, lorsqu'on clique dessus, effacera toutes les cases à cocher. Si l'utilisateur clique sur le bouton "Effacer tout", je ne veux pas que les cases à cocher déclenchent leur événement Checked. Y-a-t'il une façon de le faire?Est-il possible d'empêcher un WPF CheckBox de déclencher son événement Checked?
Répondre
Retirez le gestionnaire d'événements au début du dans le gestionnaire d'événements de bouton All Clear et puis ajoutez le gestionnaire d'événements à la fin du gestionnaire d'événements de bouton All Clear.
est ici un échantillon sale:
XAML
<Window x:Class="UncheckedTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<CheckBox Height="16" Margin="22,30,136,0" Name="checkBox1" VerticalAlignment="Top"
Unchecked="checkBox1_Unchecked">CheckBox 1</CheckBox>
<CheckBox Height="16" Margin="22,76,136,0" Name="checkBox2" VerticalAlignment="Top"
Unchecked="checkBox2_Unchecked">CheckBox 2</CheckBox>
<CheckBox Margin="22,0,136,121" Name="checkBox3" Height="16" VerticalAlignment="Bottom"
Unchecked="checkBox3_Unchecked">CheckBox 3</CheckBox>
<Button HorizontalAlignment="Right" Margin="0,118,37,121" Name="button1" Width="87"
Click="button1_Click">Uncheck All</Button>
<TextBox Height="74" Margin="22,0,20,13" Name="textBox1" VerticalAlignment="Bottom"
TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" />
</Grid>
</Window>
code Derrière
using System;
using System.Windows;
namespace UncheckedTest
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
private int i = 1;
public Window1()
{
InitializeComponent();
}
void checkBox3_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.Text = i++.ToString() + ". Checkbox 3 Unchecked." + Environment.NewLine + textBox1.Text;
}
void checkBox2_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.Text = i++.ToString() + ". Checkbox 2 Unchecked." + Environment.NewLine + textBox1.Text;
}
void checkBox1_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.Text = i++.ToString() + ". Checkbox 1 Unchecked." + Environment.NewLine + textBox1.Text;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
checkBox1.Unchecked -= checkBox1_Unchecked;
checkBox2.Unchecked -= checkBox2_Unchecked;
checkBox3.Unchecked -= checkBox3_Unchecked;
checkBox1.IsChecked = false;
checkBox2.IsChecked = false;
checkBox3.IsChecked = false;
checkBox1.Unchecked += checkBox1_Unchecked;
checkBox2.Unchecked += checkBox2_Unchecked;
checkBox3.Unchecked += checkBox3_Unchecked;
}
}
}
Merci, cette solution semble un peu hack-ish mais c'est probablement la meilleure solution. Une autre solution viable est celle fournie par Jeff, pour créer une variable qui est vérifiée pour voir si elle devrait traiter la logique 'Checked'. –
Il serait idéal de désactiver l'événement mais je ne sais pas comment cela serait fait.
Bien qu'il soit aussi facile d'ajouter un booléen pour garder la trace si le bouton "Effacer tout" a été pressé ou non. Ensuite, ne faites que le code non coché s'il n'a pas été décoché par le bouton.
private bool clearAllClicked = false;
private void button_Click(object sender, RoutedEventArgs e)
{
clearAllClicked = true;
checkbox.IsChecked = false;
clearAllClicked = false;
}
private void checkbox_Unchecked(object sender, RoutedEventArgs e)
{
if (!clearAllClicked)
{
//do stuff
}
}
Ceci est une solution viable, mais je voudrais éviter de devoir créer une autre variable si possible. –
Vous pouvez utiliser l'événement 'Cliquez' au lieu de 'checked' ou « Non vérifiée ' événements. 'Click' s'assurera que le changement d'état proviendra de l'entrée de l'utilisateur (via le bouton de la souris ou la barre d'espace par exemple)
Et des opérations comme cb.IsChecked = value
ne déclencheront pas l'événement 'Clic'.
Presque oublié à ce sujet! Cela pourrait résoudre mon problème, merci! – Enrico
Juste un avertissement, Cela ne se déclenche pas si la barre d'espace est utilisée et peut également basculer l'entrée de la case à cocher. –
- 1. Comment déclencher un événement attaché dans wpf?
- 2. Comment définir une propriété checked Checkbox true
- 3. WPF Checkbox n'affiche pas un UIElement comme son contenu
- 4. Animation WPF/XAML avec son propre événement
- 5. WPF - Obtenir propriété checked ComboBox ListBox
- 6. Comment obtenir Checked CheckBox valeur de valeur dans Vb.Net?
- 7. Déclencher un événement par programme?
- 8. Meilleure pratique: CheckBox DataBindings vs événement CheckedChanged
- 9. WPF Toolkit DataGrid Checkbox Problèmes
- 10. déclencher un événement par code dans android
- 11. Quand déclencher un événement de contrôle personnalisé?
- 12. WPF CheckBox avec l'aspect "Button"
- 13. Comment déclencher un événement JavaScript cliquez sur
- 14. CheckBox non checked Evénement lorsque la souris atteint le contenu
- 15. Comment déclencher cet événement?
- 16. Événement PropertyChanged, déclencher lors OnClick?
- 17. Événement pour checkbox sur gridview?
- 18. Comment déclencher un événement onchange manuellement?
- 19. Déclencher un événement personnalisé dans Rx JS
- 20. Comment déclencher un événement en utilisant Xcode?
- 21. Déclencher un événement avec le prototype
- 22. Comment déclencher un événement entre classes?
- 23. Silverlight 3 Datatemplate: déclencher un événement button_click
- 24. Comment déclencher un événement personnel en Javascript
- 25. Comment déclencher un événement en utilisant addHandler
- 26. Raising WPF événement MouseLeftButtonDownEvent
- 27. WPF checkbox binding
- 28. comment déclencher un événement de navigationitem rightBarButtonItem par programme?
- 29. Est-il possible de déclencher un événement onclick dans une URL ou une chaîne de requête?
- 30. C# - Comment déclencher un événement d'opacité lorsque le formulaire perd son focus?
Je crois que vous voulez dire événement non contrôlé, n'est-ce pas? –
Désolé, l'événement Décoché. –