关于Windows Presentation Foundation(C#)的一些问题

时间:2013-07-25 16:12:45

标签: c# wpf wpf-controls

我正在开发一个程序,其中包含(除其他外)一个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窗口。
  3. 真的需要帮助解决这些问题。这是我正在研究的一个非常重要的项目。

1 个答案:

答案 0 :(得分: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;
            }
        }));
    }

希望这会有所帮助!!