Tri-State-Checkbox - so ändern Sie die Reihenfolge der Staaten
Ich habe eine CheckBox in meine Anwendung, die die TriState-Modus. Das normale Verhalten bei diesem Modus zu sein scheint, Radfahren zwischen null, false, true.
Möchte ich dieses Verhalten so ändern, dass es Zyklen zwischen null, true, false.
Was ist der beste Weg, dies zu tun?
Ich habe versucht, indem Sie einen click-handler, ähnlich wie diese:
void cb_Click(object sender, RoutedEventArgs e)
{
if (((CheckBox)e.Source).IsChecked.HasValue == false)
{
((CheckBox)e.Source).IsChecked = true;
return;
}
if (((CheckBox)e.Source).IsChecked == true)
{
((CheckBox)e.Source).IsChecked = false;
return;
}
if (((CheckBox)e.Source).IsChecked == false)
{
((CheckBox)e.Source).IsChecked = null;
return;
}
}
Aber das scheint zu deaktivieren Sie das Markierungsfeld vollständig. Ich bin mir ziemlich sicher, dass ich ' m fehlt etwas, das sollte klar sein.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, der event-handler und das Standard-Verhalten sind einfach stornieren der jeweils anderen Effekte, so dass die checkbox scheint deaktiviert...
Eigentlich ich hatte vor kurzem das gleiche zu tun. Ich hatte zu Erben aus
CheckBox
und überschreibenOnToggle
:Nur der Vollständigkeit halber hier noch die Lösung für Windows-Forms. Wir haben das überschreiben der
OnClick
Methode überschreibenOnStateChanged
Ergebnisse in der Anzeige-bug (und stackoverflow, wenn Sie nicht ordnungsgemäß durchgeführt).Vielen Dank, es war sehr nützlich zu lösen, die ein ähnliches Verhalten mit ToggleButton.
Als wies darauf hin, es gibt keine
CheckBox.OnToggle()
überschreiben in WinForms, so dass in diesem FallCheckBox.OnClick()
ist, wo man den Kopf für.Hier ist eine minimale Implementierung der WinForms-checkbox, die Zyklen nicht aktiviert -> Unbestimmt -> Aktiviert -> Deaktiviert..., anstelle der standardmäßig nicht aktiviert -> Aktiviert -> Unbestimmt -> Deaktiviert...
Oder wenn Sie glücklich sind, über die Einführung einer Abhängigkeit, welche int-Werte Windows zugewiesen, was Staaten von CheckState, das funktioniert auch:
Akzeptierte Lösung ist die beste, aber wenn Sie nicht wollen, erstellen Sie eine Unterklasse erstellen, tun Sie einfach etwas wie:
Es schaffen (geprüft) Sequenz: unbestimmt -> wahr -> falsch> true -> falsch> true -> ...