2014-01-27 60 views
2

在我的MenuItem上此刻打開一個窗口。然後,如果人選擇再次點擊該MenuItem,我需要打開的窗口關閉。打開並關閉同一個按鈕上的同一個窗口單擊

那很明顯,如果他們點擊它,第三次它會打開,所以第四。

XAML

<MenuItem x:Name="btnHelp" Click="btnHelp_Click" Foreground="#FF7E8385" FontFamily="Calibri" FontSize="18" Margin="110,10,0,0" Height="30" Width="70" Style="{x:Null}" BorderBrush="Transparent" Background="Transparent" Cursor="Hand"/> 

代碼背後

private void btnHelp_Click(object sender, RoutedEventArgs e) 
{ 
    xamlHelp help = new xamlHelp(); 
    help.Show(); 
} 
+0

只需測試該窗口當前是否正在顯示並採取相應措施。 – rae1

+0

將對xamlHelp的引用移動到類級別(處理程序外部)。然後,檢查窗口是否可見,並在處理程序中切換它。 – Steve

+0

@Steve感謝您的信息,我認爲您的評論被複制到答案中。 – Ben

回答

4

你需要有自己的變量是一個實例字段,而不是一個局部變量,因此它之間可以訪問調用。在這一點上只是關閉它,如果它存在,並重新創建/顯示它,如果它不:

private xamlHelp help = null; 
private void btnHelp_Click(object sender, RoutedEventArgs e) 
{ 
    if (help != null) 
    { 
     help.Close(); 
     help = null; 
    } 
    else 
    { 
     help = new xamlHelp(); 
     help.Show(); 
    } 
} 
+1

但是,這會每次創建一個新的'xamlHelp'。顯示/隱藏相同的實例不是更容易嗎? – rae1

+0

@ rae1如果他願意,他可以這樣做。它在工作方面幾乎是相同的,可能顯示/隱藏更多的工作,並且從用戶交互和資源消耗的角度來看也可能是不希望的。然而,在他特別提到的問題中,他並沒有隱瞞,所以就是這樣做了。 – Servy

+0

只是好奇,爲什麼從用戶交互和資源消耗的角度來看它是不受歡迎的? – rae1

1

可以保留的幫助是否正在展示和表演曲目/隱藏此基礎上,

private xamlHelp help = new xamlHelp(); 
private bool showingHelp = false; 
private void btnHelp_Click(object sender, RoutedEventArgs e) 
{ 
    if (showingHelp) 
    { 
     help.Hide(); 
    } 
    else 
    { 
     help.Show(); 
    } 
} 
+0

感謝您的回答,這可以工作,但我不希望窗體上的數據只是隱藏,我需要它關閉。謝謝你的幫助。 – Ben

相關問題