2013-07-25 30 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; 
      } 
     })); 
    } 

希望這有助於!