Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使WPF窗口的行为类似于上下文菜单(正确显示/隐藏它)_C#_.net_Wpf_Winapi - Fatal编程技术网

C# 使WPF窗口的行为类似于上下文菜单(正确显示/隐藏它)

C# 使WPF窗口的行为类似于上下文菜单(正确显示/隐藏它),c#,.net,wpf,winapi,C#,.net,Wpf,Winapi,我想创建一个WPF窗口,其行为类似于上下文菜单 例如,当我显示wpf窗口时,我希望它是最上面的窗口,从那里开始,如果用户单击该窗口之外的任何内容,我希望该窗口再次被隐藏 到目前为止,我已经尝试了很多技术,但我发现唯一一种可以起作用的技术显示在这里。它第一次起作用,但此后再也不会起作用: public TheWindow() { InitializeComponent(); this.Topmost = true; } void ShowMe() { this.Show(

我想创建一个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();
}

我也尝试过只处理停用的事件,但由于某些原因,它也只在第一次工作。

不足以满足您的需要吗?它有一个属性,可以让它像您描述的那样工作。

我不知道这会有多大帮助,但如果您不一定需要窗口,我使用的一种技术是将UserControl放置在窗口中

根据任何条件,都会显示关联菜单。在菜单中,我放置了一个菜单项,并在其中放置了用户控件。它的行为将完全符合您的要求。您可以在屏幕上的任何位置显示关联菜单,在其边界外单击将关闭它

见:
例如,如何在屏幕上的任何位置显示上下文菜单。此外,您还需要覆盖菜单项的默认模板,以便将鼠标悬停在菜单项上时不会突出显示该菜单项。

您将无法在该弹出窗口中设置焦点,也无法使用键盘在其中导航。