2016-02-04 29 views
0

我在我的MainWindow中有一個CheckBox,它用作打開和關閉另一個窗口(讓我們說NextWindow)的切換。簡單說來我做了什麼直到現在是:當窗口關閉時,複選框狀態改變

  • CheckBox被選中,打開另一個窗口
  • CheckBox選中此項,則關閉打開的窗口中

我想要什麼現在是更改CheckBox狀態,當用戶手動關閉NextWindow時。我需要做什麼?
這裏是我的代碼:

對於MainWindow.XAML

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="100" Width="100"> 
<Grid> 
    <CheckBox Name="chk" Checked="chk_Checked_1" Unchecked="chk_Unchecked_1" Margin="20">Window</CheckBox> 
</Grid> 

對於MainWindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void chk_Checked_1(object sender, RoutedEventArgs e) 
    { 
     NextWindow nw = new NextWindow(); 
     nw.Show(); 
    } 

    private void chk_Unchecked_1(object sender, RoutedEventArgs e) 
    { 
     var window = IsWindowOpen<Window>("Next"); 

     if (window != null) 
     { 
      window.Close(); 
     }   
    } 
    public static T IsWindowOpen<T>(string name = null) 
    where T : Window 
    { 
     var windows = Application.Current.Windows.OfType<T>(); 
     return string.IsNullOrEmpty(name) ? windows.FirstOrDefault() : windows.FirstOrDefault(w => w.Name.Equals(name)); 
    } 
} 

對於NextWindow.xaml

<Window x:Class="WpfApplication2.NextWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="NextWindow" Height="100" Width="100" Name="Next"> 
<Grid> 
    <Label Margin="20">Hello</Label> 
</Grid> 

+0

使用封閉事件? https://stackoverflow.com/questions/10033551/wpf-window-closed-event-usage和https://msdn.microsoft.com/en-us/library/system.windows.window.closed(v=vs。 110).aspx – Arie

+0

如此簡單而優雅。謝謝@Arie – Skaranjit

回答

1

好吧,我跟着this link的意見建議,並做了以下修改我的代碼:

MainWindow

private void chk_Checked_1(object sender, RoutedEventArgs e) 
    { 
     NextWindow nw = new NextWindow(); 
     nw.Closed += nw_Closed; 
     nw.Show(); 
    } 

    void nw_Closed(object sender, EventArgs e) 
    { 
     chk.IsChecked = false; 
    } 
0

只需更改取消選中事件處理這樣的:

private void chk_Unchecked_1(object sender, RoutedEventArgs e) 
    { 
     var window = IsWindowOpen<Window>("Next"); 

     if (window != null) 
     { 
      window.Close(); 
      ((CheckBox)sender).IsChecked = false;  
     }   
    } 
+0

當我取消勾選複選框時,使用'((CheckBox)sender)調用此事件.IsChecked = false; '是毫無意義的。 – Skaranjit