os eventos de @MouseDoubleClick no burbujean

Mi escenario, simplificado: tengo un ListView que contiene filas de Empleados, y en cada fila de Empleados, hay botones "Aumentar" y "Disminuir" que ajustan su salario.

Finja que en mi programa, hacer doble clic en una fila de Empleado significa "despedir a esta persona".

Losproblem es que mientras hago clic en "Aumentar" rápidamente, esto activa un evento de doble clic en ListViewItem. Naturalmente, no quiero despedir a las personas cuando solo estoy aumentando su salario.

De acuerdo con el funcionamiento de todos los demás eventos, espero poder resolver esto configurandoHandled=true en el evento. Esto, sin embargo, no funciona. Me parece que WPF genera dos eventos separados, completamente desvinculados, de doble clic.

El siguiente es un ejemplo mínimo para reproducir mi problema. Los componentes visibles:

<ListView>
    <ListViewItem MouseDoubleClick="ListViewItem_MouseDoubleClick">
            <Button MouseDoubleClick="Button_MouseDoubleClick"/>
    </ListViewItem>
</ListView>

Y el código del controlador:

private void Button_MouseDoubleClick(object s, MouseButtonEventArgs e) {
    if (!e.Handled) MessageBox.Show("Button got unhandled doubleclick.");
    e.Handled = true;
}

private void ListViewItem_MouseDoubleClick(object s, MouseButtonEventArgs e) {
    if (!e.Handled) MessageBox.Show("ListViewItem got unhandled doubleclick.");
    e.Handled = true;
}

Después de iniciar este programa y hacer doble clic en el botón de la lista,ambo cuadros de mensaje aparecen en secuencia. (Además, el botón está atascado en la posición hacia abajo después de esto).

Como una "solución" Ilat, en el controlador ListViewItem, inspeccione el árbol visual adjunto al evento y compruebe que "hay un botón allí en alguna parte" y, por lo tanto, descarte el evento, pero este es un último recurso. Al menos quiero entender el problema antes de codificar tal error.

Alguien sabepor qu WPF hace esto, y una forma idiomática elegante para evitar el problema?

Respuestas a la pregunta(7)

Su respuesta a la pregunta