1

我正在开发一个程序,该程序包含(除其他外)一个 WPF 窗口,我正在使用下一个代码在 MouseDoubleClick 事件中将其最大化:

       this.WindowStyle = WindowStyle.None;            
       this.WindowState = WindowState.Maximized;      
       this.Topmost = true;  

现在,我想要做的是,当窗口最大化并且鼠标退出屏幕(转到屏幕底部直到它退出屏幕)时,一个新窗口出现在屏幕底部(WPF 或 WindowsForm)它将包含几个东西(按钮、滚动条等),并且只有当鼠标在它上面时才会激活(就像在 BSplayer 中一样)。我的问题是如何做到这一点?我真的是 WPF 的初学者,我不知道 XAML,我更愿意尽可能多地使用 C# 代码。那么:我如何知道鼠标何时离开屏幕以及如何使该窗口出现在屏幕底部(不最小化或对原始窗口执行任何其他操作)?我尝试使用 this.MouseLeave 但是当窗口最大化时它不起作用。

如果我在这里问这个问题,我会借此机会问另外两件事:

  1. 当 WPF 窗口最大化并且鼠标未移动超过 5 秒时,我希望鼠标被隐藏并仅在鼠标移动时再次可见。我该怎么做呢 ?
  2. 当 WPF 窗口未最大化时,我希望屏幕的边框非常小,几乎不可见(没有最小化、关闭或其他按钮)。我正在使用 this.WindowStyle = System.Windows.WindowStyle.ToolWindow 但它仍然在那里留下退出/关闭按钮;如果我使用 this.WindowStyle = System.Windows.WindowStyle.None 它看起来很完美,但是我无法移动窗口。无论如何,我在那里使用 WindowStyle.None 使窗口可移动?最好,当我在屏幕内部按住鼠标时,我希望能够在我的屏幕上拖动 WPF 窗口。

这些问题真的需要帮助。这是我正在从事的一个非常重要的项目。

4

1 回答 1

1

回答这个问题

当 WPF 窗口最大化并且鼠标未移动超过 5 秒时,我希望鼠标被隐藏并仅在鼠标移动时再次可见。我该怎么做呢 ?

这可以通过使用间隔为 5 秒的计时器来实现。当计时器过去时,将鼠标光标设置为“无”以隐藏它,当鼠标移动时,将鼠标光标重置为原始光标。

将以下代码放入构造函数中:

 this.MouseMove += new MouseEventHandler(MainWindow_MouseMove);
        tm = new System.Timers.Timer();
        tm.Interval = 5000;
        tm.Elapsed += new System.Timers.ElapsedEventHandler(tm_Elapsed);
        tm.Start();

以下是事件定义:

void MainWindow_MouseMove(object sender, MouseEventArgs e)
    {
        tm.Stop();
        tm.Start();

        // Reseting the time back to original. Here I have assumed that original one is Arrow.
        this.Dispatcher.Invoke(new Action(() =>
        {
            Mouse.OverrideCursor = Cursors.Arrow;
        }));
    }

    void tm_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {

        this.Dispatcher.Invoke(new Action(() =>
        {
            if (Mouse.OverrideCursor != Cursors.None)
            {
                Mouse.OverrideCursor = Cursors.None;
                currentCursor = Mouse.OverrideCursor;
            }
        }));
    }

希望这可以帮助 !!

于 2013-07-29T08:12:52.093 回答