2014-03-24 6 views
0

Я использую всплывающее управление silvelight. У меня есть всплывающее окно, которое открывается, когда пользователь нажимает кнопку. Я хочу закрыть всплывающее окно, когда пользователь щелкает за пределами всплывающего окна окно.Закрытие всплывающего окна при щелчке пользователем за пределами всплывающего окна

Пожалуйста, дайте мне знать, как мы можем это сделать.

ответ

1

Зарегистрируйте MouseLeftButtonDownEventHandler и, если хотите, MouseRightButtonDownEventHandler в корневом элементе приложения SL. Откроем PopUp. Вы хотите обрабатывать даже те события, которые уже обрабатывал другой элемент (например, когда пользователь нажимает текстовое поле вне всплывающего окна).

... 
var root = System.Windows.Application.Current.RootVisual; 
MouseButtonEventHandler handler = HandleRootMouseLeftButtonDown; 
root.AddHandler(UIElement.MouseLeftButtonDownEvent, handler, true); 
... 
private void HandleRootMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    m_popup.IsOpen = false; 
} 
+0

Я пробовал, чтобы это не сработало, вы можете более подробно объяснить – user3454168

+0

@ user3454168: Он компилируется? Успешно ли зарегистрирована обработчик событий щелчка мыши? вы установили точку останова внутри кода обработчика и попадете ли вы при нажатии на пользовательский интерфейс? – Martin

+0

Это решило мою проблему. У меня уже был обработчик событий по форме, но не Root, поэтому щелчок по пустой области формы НЕ закрывал всплывающее окно, но при нажатии на другие объекты закрывалось всплывающее окно. Я изменил свой обработчик на ваш пример, теперь щелчок в любом месте всплывающего окна закрывает всплывающее окно, как ожидалось. – Jerry

Смежные вопросы