Ich habe eine Gruppe von WPF-CheckBoxes, die einen Checked-Event-Handler haben, der Logik verarbeitet, wenn der Benutzer auf einen von ihnen klickt. Ich habe aber auch eine "Alles löschen" -Schaltfläche, die beim Anklicken alle Kontrollkästchen deaktiviert. Wenn der Benutzer auf die Schaltfläche "Alles löschen" klickt, möchte ich nicht, dass die Checkboxen ihr Checked-Ereignis auslösen. Gibt es eine Möglichkeit, dies zu tun?Gibt es eine Möglichkeit zu verhindern, dass eine WPF CheckBox ihr Checked-Ereignis auslöst?
Antwort
die Event-Handler zu Beginn des Entfernen im Löschen Sie all Event-Handler der Schaltfläche All Event-Handler der Schaltfläche und dann erneut hinzufügen, die Event-Handler am Ende des Clear.
Hier ist ein schmutziges Beispiel:
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 hinter
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;
}
}
}
Danke, diese Lösung scheint ein bisschen hack-isch, aber ist wahrscheinlich der beste Weg zu gehen. Eine andere praktikable Lösung ist diejenige, die von Jeff zur Verfügung gestellt wird, um eine Variable zu erzeugen, die überprüft wird, um zu sehen, ob sie die "geprüfte" Logik verarbeiten soll. –
Es wäre ideal, das Ereignis zu deaktivieren, aber ich weiß nicht, wie das geschehen würde.
Es wäre aber genauso einfach, einen Booleschen Wert hinzuzufügen, um zu verfolgen, ob die Schaltfläche "Alle löschen" gedrückt wurde. Führen Sie dann nur den Deaktivierungscode aus, wenn die Schaltfläche nicht deaktiviert wurde.
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
}
}
Dies ist eine praktikable Lösung, aber ich möchte verhindern, dass ich, wenn möglich, eine andere Variable erstellen muss. –
Sie können die 'Click' Ereignis verwenden anstelle von 'Karo' oder ‚Nicht markiert ' Veranstaltungen.
Durch Klicken wird sichergestellt, dass die Statusänderung von der Benutzereingabe kommt (z. B. über die Maustaste oder die Leertaste).
Und Operationen wie cb.IsChecked = value
werden nicht das Ereignis "Click" auslösen.
Fast vergessen, dass! Es könnte tatsächlich mein Problem lösen, danke! – Enrico
Nur eine Warnung, dies wird nicht ausgelöst, wenn die Leertaste verwendet wird, die auch die Checkbox-Eingabe umschalten kann. –
- 1. Gibt es eine Möglichkeit zu verhindern, dass nur ein bestimmtes Kind eine SIGCHLD auslöst?
- 2. Gibt es eine Möglichkeit, zu verhindern, dass fastclick beim Scrollen den Status "active" auslöst?
- 3. Gibt es eine Möglichkeit zu verhindern, dass UIImagePickerController Statusleiste ändern?
- 4. Gibt es eine Möglichkeit, Bindungen in WPF erneut zu verwenden?
- 5. ActionScript - Gibt es eine Möglichkeit, dem Entwickler mitzuteilen, dass diese Methode eine Ausnahme auslöst?
- 6. Gibt es eine elegante Möglichkeit, zu verhindern, dass eine Klasse private Daten speichert?
- 7. Gibt es eine Möglichkeit, dass es jemals PHP.NET gibt?
- 8. Gibt es eine einfache Möglichkeit zu sehen, welche Ausnahmen eine Kotlin-Funktion auslöst?
- 9. Gibt es eine Möglichkeit, eine bereits geschlossene WPF-Fensterinstanz wiederzuverwenden
- 10. Gibt es eine Möglichkeit, WPF Routed Events zu sehen?
- 11. Verhindern, dass eine TreeView Ereignisse in VB6 auslöst?
- 12. WPF - Gibt es eine Möglichkeit, eine Bindung programmatisch auszuwerten?
- 13. Gibt es eine Möglichkeit, eine WPF-Datagrid NewItem Platzhalter stylen
- 14. Gibt es eine Möglichkeit, den Checkbox-Status von .html()
- 15. Gibt es eine Möglichkeit, eine Funktion in jQuery zu deaktivieren?
- 16. Gibt es eine Möglichkeit, zu verhindern, dass AJAX-Seiten alleine in einem Browser angezeigt werden?
- 17. Gibt es eine Möglichkeit zu verhindern, dass DLL in einer Software wie Reflektor geöffnet wird?
- 18. Gibt es eine Möglichkeit zu verhindern, dass CL_SALV_TABLE führende Leerzeichen entfernt?
- 19. Gibt es eine Möglichkeit zu verhindern, dass sed Wagenrücklauf hinzufügt (^ M)?
- 20. Gibt es eine Möglichkeit zu verhindern, dass Zeilen übersprungen werden, wenn Sie csv.dictWriter.writerow (somerow) verwenden
- 21. Gibt es eine Möglichkeit zu verhindern, dass die Konsolenanwendung geschlossen wird?
- 22. Gibt es eine Möglichkeit, zu verhindern, * dass ReSharper die Komponententests einer Baugruppe parallel ausführt?
- 23. Gibt es eine Möglichkeit, zu verhindern, dass Play automatisch neu geladen wird?
- 24. Gibt es eine Möglichkeit zu verhindern, dass Mongo-Abfragen auf Arrays "verzweigen"?
- 25. SQL Server: Gibt es eine Möglichkeit zu verhindern, dass Benutzer alle Datenbanken in einer Instanz sehen?
- 26. Gibt es eine Möglichkeit zu verhindern, dass der Inhalt eines Contenteditable über Elementen in IE10 erscheint?
- 27. Gibt es eine Möglichkeit zu verhindern, dass Hibernate in @Wo-Annotationen boolesche Literale verfälscht?
- 28. Gibt es eine Möglichkeit, zu verhindern, dass Klassenautoren Klassenvariablen beim Testen von E-Mails?
- 29. Gibt es eine Möglichkeit, zu verhindern, dass sich die Einheit in ein Etikett wickelt?
- 30. Gibt es eine Möglichkeit, zu verhindern, dass die Hintergrundausgabe die Eingabe in einem Linux-Terminal unterbricht?
Ich glaube, du meinst unkontrolliertes Ereignis richtig? –
Richtig sorry, das ungeprüfte Ereignis. –