Событие левой кнопки мыши вверх и openfiledialog

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

Microsoft.Win32.OpenFileDialog dlgOpenFiles = новый Microsoft.Win32.OpenFileDialog (); dlgOpenFile.DoModal ();

К изображениям прикреплено событие LeftButtonUp. Проблема в том, что если я выбираю файл, дважды щелкнув его, диалоговое окно открытия файла закрывается (что хорошо), но, кроме того, изображение за выбранным файлом получает сообщение LeftButtonUp, что совсем не хорошо.

Я использую wpf / c # / vs2010


person phm    schedule 09.06.2010    source источник
comment
вы можете поделиться своим макетом? Вы уверены, что на ваше изображение не нажимают постоянно?   -  person Amsakanna    schedule 09.06.2010
comment
У меня тоже такая же проблема. Я бы счел это ошибкой общего диалогового окна Microsoft. Перед показом диалогового окна я удалил функцию обработки событий из цепочки событий с помощью оператора - =, затем, после закрытия диалогового окна, я снова добавляю функцию обработки событий, и вскоре после того, как я добавляю их обратно, они запускаются автоматически ... Я все равно не могу от этого избавиться.   -  person LazNiko    schedule 24.08.2011


Ответы (1)


Самый простой способ обойти это - всякий раз, когда вам нужен обработчик для события нажатия кнопки, добавить событие нажатия кнопки и выполнить в нем CaptureMouse(). Теперь в событии «кнопка вверх» вы можете игнорировать все события, которые происходят без IsMouseCaptured. И не забудьте ReleaseMouseCapture():

private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    CaptureMouse();
}

private void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (!IsMouseCaptured)
        return;
    ReleaseMouseCapture();
    var dlg = new OpenFileDialog();
    var res = dlg.ShowDialog(this);
    // ...
}
person repka    schedule 09.06.2010