Сделать окно WPF вести себя как контекстное меню (показать / скрыть его правильно) - PullRequest
2 голосов
/ 12 декабря 2008

Я хочу создать окно WPF, которое ведет себя как контекстное меню.

Так, например, когда я показываю окно wpf, я хочу, чтобы оно было самым верхним окном, а затем, если пользователь щелкает что-нибудь за пределами этого окна, я хочу, чтобы окно снова было скрыто.

До сих пор я пробовал довольно много техник, но единственная, что я обнаружил, что это работает, показана здесь. Это работает в первый раз, но больше никогда после этого:

public TheWindow()
{
    InitializeComponent();
    this.Topmost = true;
}

void ShowMe()
{
    this.Show();
    this.CaptureMouse();
}

void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
    /// TODO: Check if they clicked outside the window here!
    this.ReleaseMouseCapture();
    this.Hide();
}

Я также пытался обработать событие «Деактивировано», но по какой-то причине оно работает только в первый раз.

Ответы [ 2 ]

4 голосов
/ 12 декабря 2008

Не достаточно ли PopUp для ваших нужд? У него есть свойство StaysOpen , которое позволяет ему действовать так, как вы описали.

1 голос
/ 12 декабря 2008

Не знаю, насколько это будет полезно, но если вам не обязательно использовать окно, я использовал одну из техник - размещение UserControl внутри окна.

В зависимости от каких-либо условий вам будет показано контекстное меню. Внутри меню я поместил пункт меню, а внутри него просто поместил пользовательский элемент управления. Он будет вести себя точно так, как вы хотите. Вы можете отобразить контекстное меню в любом месте экрана и щелкнуть за его пределами, чтобы закрыть его.

См .: http://andyonwpf.blogspot.com/2006/10/dropdownbuttons-in-wpf.html для примера того, как можно показать контекстное меню в любом месте на экране. Кроме того, вам потребуется переопределить шаблон по умолчанию для MenuItem, чтобы при наведении курсора на элемент меню он не выделялся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...