не отвечает на вопрос

ценарий упрощен: у меня есть ListView, содержащий ряды сотрудников, и в каждой строке сотрудника есть кнопки «Увеличить» и «Уменьшить», регулирующие его зарплату.

Представьте, что в моей программе двойной щелчок строки «Сотрудник» означает «уволить этого человека».

проблема в то время как я быстро нажимаю «Увеличить», это вызывает событие двойного щелчка на ListViewItem. Естественно, я не хочу увольнять людей, когда я просто увеличиваю их зарплату.

В зависимости от того, как работают все другие события, я ожидаю, что смогу решить эту проблему, установивHandled=true на мероприятии. Это, однако, не работает. Мне кажется, что WPF генерирует два отдельных, совершенно несвязанных события двойного щелчка.

Ниже приведен минимальный пример для воспроизведения моей проблемы. Видимые компоненты:

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

И код обработчика:

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;
}

После запуска этой программы и двойного нажатия на кнопку в списке,обе Окна сообщений отображаются последовательно. (Кроме того, кнопка застревает в нижнем положении после этого.)

Как "исправить" яМожнов обработчике ListViewItem проверьте визуальное дерево, присоединенное к событию, и убедитесь, что «где-то есть кнопка», и, таким образом, отмените событие, но это последнее средство. Я хочу, по крайней мере, понять проблему, прежде чем кодировать такой кладж.

Кто-нибудь знаетПочему WPF делает это, и элегантный идиоматический способ избежать проблемы?

Ответы на вопрос(7)

Ваш ответ на вопрос