Tengo un grupo de CheckBoxes de WPF que tienen un controlador de eventos Checked que maneja un poco de lógica cuando el usuario hace clic en uno de ellos. Sin embargo, también tengo un botón "Borrar todo" que, al hacer clic, borrará todas las casillas de verificación. Si el usuario hace clic en el botón "Borrar todo", NO quiero que las casillas activen su evento Controlado. ¿Hay alguna forma de hacer esto?¿Hay alguna manera de evitar que un WPF CheckBox active su evento Checked?
Respuesta
Retire el controlador de eventos en el inicio de la Borrar en el controlador de eventos de botón Todo y luego volver a agregar el controlador de eventos en el extremo del botón Borrar todo del controlador de eventos.
He aquí una muestra sucia:
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>
Código Detrás
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;
}
}
}
Gracias, esta solución parece un poco hack-ish, pero es probablemente la mejor manera de hacerlo. Otra solución viable es la proporcionada por Jeff, para crear una variable que se verifica para ver si debe procesar la lógica 'Checked'. –
Sería ideal para desactivar el evento, pero no sé cómo se haría eso.
Aunque sería tan fácil agregar un booleano para realizar un seguimiento si se presionó o no el botón "Borrar todo". Luego, solo haga el código Desmarcado si no fue desmarcado a través del botón.
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
}
}
Esta es una solución viable, pero me gustaría evitar tener que crear otra variable si es posible. –
Usted puede utilizar el evento 'click' en lugar de 'marcado' o 'No verificado ' eventos.
'Click' garantizará que el cambio de estado provendrá de la entrada del usuario (mediante el botón del mouse o la barra espaciadora, por ejemplo).
Y operaciones como cb.IsChecked = value
no dispararán el evento 'Click'.
¡Casi me olvidé de eso! En realidad podría resolver mi problema, ¡gracias! – Enrico
Solo una advertencia, esto no se activa si se usa la barra espaciadora, que también puede alternar la entrada de la casilla de verificación. –
- 1. ¿Hay alguna manera de que un evento de inicio táctil no active el evento click?
- 2. Selenio checkbox attribute "checked"
- 3. ¿Hay alguna manera de evitar recursiones innecesarias?
- 4. checkbox true o checked o yes
- 5. JQuery validation-select required if checkbox checked
- 6. JS ¿Hay alguna manera de verificar si existe un evento?
- 7. WPF checkbox binding
- 8. ¿Hay alguna manera de evitar que un WPF Popup se reposicione cuando se sale de la pantalla?
- 9. ¿Hay alguna manera de evitar que el navegador complete automáticamente un cuadro de entrada?
- 10. Evitar que el evento click se active cuando se activa el evento dblclick
- 11. ¿Hay alguna manera de evitar la búsqueda lineal en esto?
- 12. ¿Hay alguna manera de evitar $ this-> en todas partes?
- 13. ¿Hay alguna manera de evitar que dos ramas se fusionen en git?
- 14. checked = "checked" vs checked = true
- 15. ¿Hay alguna manera de evitar que Firebug trabaje en un sitio en particular?
- 16. ¿Hay alguna manera de evitar que mi aplicación ofuscada parezca un virus?
- 17. ¿Hay alguna manera de evitar que el texto se vuelva gris cuando desactivo un botón?
- 18. estado Cambio CheckBox sin llamar OnClick evento
- 19. .prop ('checked', false) o .removeAttr ('checked')?
- 20. Mejor práctica: CheckBox DataBindings vs CheckedChanged evento
- 21. jQuery evitar que el evento de clic se active al desplazarse por un div
- 22. ¿Hay alguna manera de hacer que un ExecutorService funcione recursivamente?
- 23. Cómo bloquear hasta que se active un evento en C#
- 24. ¿Hay alguna manera para que un div en particular ignore su posicionamiento de div principal?
- 25. ¿Hay alguna manera de crear su propio elemento HTML?
- 26. ¿Hay alguna manera fácil de hacer que ScrollViewer sea "hinchable"?
- 27. WPF DataGrid - Ocultar columna usando un CheckBox
- 28. ¿Hay alguna manera de comentar XAML que contiene comentarios?
- 29. ¿Hay alguna manera de ignorar un caso que no coincide?
- 30. ¿Hay alguna manera de despertar un hilo que duerme?
Creo que quieres decir evento sin marcar ¿verdad? –
Lo siento, el evento no seleccionado. –