2013-07-25 25 views
1

我的工作包含程序(除其他事项外)一个WPF窗口,我现在用的是下面的代码到它在MouseDoubleClick事件最大化:有关的Windows Presentation Foundation(C#)的一些问题

 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窗口。

真的需要帮助解决这些问题。这是我正在研究的一个非常重要的项目。

+2

'这是一个非常重要的项目,我正在努力。' - 如果项目很重要,您宁愿学习XAML而不是避免它。 –

+0

@TheQuestioner要切换“BSplayer”窗口的可见性,您可以使用样式触发器或将其绑定到VM。 HighCore说,它们可以在非常初级的程度上编程。如果你每天工作,Xaml的学习曲线约为5周。 –

+0

一次有一个问题。所以不清楚。和“鼠标存在”。只是鼠标不存在?我知道你是新来的,但你需要清理问题或者关闭。 – Paparazzi

回答

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; 
      } 
     })); 
    } 

希望这有助于!