在光标位置打开一个小浮动窗口

Jan*_*ivZ 9 c# wpf window cursor winforms

我正在写一个小概念验证,要求我听一些按键组合,当按下时会打开WPF/WinForms当前光标位置下方的一个小窗口.我不仅仅是一个网络人,所以我从这开始就遇到了麻烦.

谁能指出我正确的方向?或者提供一些资源/示例?

谢谢.

Ana*_*aev 11

尝试WPF的这个例子.通过按键,Enter可以Popup预先显示一个窗口,接收鼠标光标的坐标.

XAML

<Window x:Class="OpenWindowForCursor.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        WindowStartupLocation="CenterScreen"
        PreviewKeyDown="Window_PreviewKeyDown">

    <Grid>
        <Popup Name="PopupWindow"
               Placement="Relative"
               IsOpen="False"
               StaysOpen="False">

            <Border Width="100" 
                    Height="100"
                    Background="AntiqueWhite">

                <Label Content="Test" />
            </Border>
        </Popup>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

Code-behind

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter) 
        {
            PopupWindow.IsOpen = true;

            var point = Mouse.GetPosition(Application.Current.MainWindow);
            PopupWindow.HorizontalOffset = point.X;
            PopupWindow.VerticalOffset = point.Y;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Edit: An easier solution

您可以设置Placement="Mouse"Popup替代接收鼠标的坐标:

XAML

<Grid>
    <Popup Name="PopupWindow"
           Placement="Mouse"
           IsOpen="False"
           StaysOpen="False">

        <Border Width="100" 
                Height="100"
                Background="AntiqueWhite">

            <Label Content="Test" />
        </Border>
    </Popup>
</Grid>
Run Code Online (Sandbox Code Playgroud)

Code-behind

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            PopupWindow.IsOpen = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)