[英]button will be Visible if another window loaded
我有一個項目,如果另一個窗口被加載,我希望MainWindow中的按鈕可見,如果該窗口關閉,則折疊
我已經嘗試過這種方式
Xaml用於MainWindow
<Grid >
<Button x:Name="button" Content="Opne Window1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="button_Click" Margin="220,110,0,0"/>
<Button x:Name="WinBut1" Content="Check order" HorizontalAlignment="Left" VerticalAlignment="Top" Visibility="Hidden" Width="75" Click="button9_Click" Margin="10,1,0,0"/>
</Grid>
在MainWindow控件的代碼背后:
public partial class MainWindow : Window
{
Window1 Window1 = new Window1();
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
//this.Window1.Loaded += new RoutedEventHandler (CheckWindow);
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Window1 childWindow = new Window1();
childWindow.MyEvent += new EventHandler(childWindow_MyEvent);
childWindow.ShowDialog();
}
void childWindow_MyEvent(object sender, EventArgs e)
{
if (Window1 != null)
{
Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(
delegate ()
{
WinBut1.Visibility = Visibility.Visible;
}
));
}
}
//void CheckWindow(object sender, RoutedEventArgs e)
//{
// if (Window1 != null && Window1.Visibility == Visibility.Visible)
// {
// Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(
// delegate ()
// {
// WinBut1.Visibility = Visibility.Visible;
// }
// ));
// }
//}
private void button_Click(object sender, RoutedEventArgs e)
{
new Window1().Show();
}
}
在Window1控件的代碼背后:
public Window1()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(win1_Loaded);
}
public event EventHandler MyEvent;
protected void OnMyEvent()
{
if (this.MyEvent != null)
this.MyEvent(this, EventArgs.Empty);
}
void win1_Loaded(object sender, RoutedEventArgs e)
{
this.OnMyEvent();
}
}
這很簡單,您只需要在MainWindow
中選擇Window1
的IsVisibleChanged
,並將按鈕的可見性設置為window1的可見性即可。
您的MainWindow.cs:
public partial class MainWindow : Window
{
Window1 window1;
public MainWindow()
{
InitializeComponent();
window1 = new Window1();
window1.IsVisibleChanged += Window1_IsVisibleChanged;
this.Closing += MainWindow_Closing;
}
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
Application.Current.Shutdown();//will close all windows
}
private void Window1_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
buttonCollapsed.Visibility = window1.Visibility;
}
private void buttonShow_Click(object sender, RoutedEventArgs e)
{
window1.Show();
}
和Window1.cs:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
this.Closing += Window1_Closing;
}
private void Window1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if(sender is Window1)
{
e.Cancel = true;//Cancel the closing
this.Hide();
}
}
private void buttonHide_Click(object sender, RoutedEventArgs e)
{
this.Hide();//hide your window --> IsVisibilityChanged-Event will be raised
}
}
好了,在Window類對象中有兩個Loaded
和Closed
事件。
您需要為其訂閱兩個事件處理程序。 所有這些都在您的Window類中完成。
根據您的要求,您可以執行以下操作:
private void Button_Click(object sender, RoutedEventArgs e)
{
Window1 win = new Window1();
win.Loaded += win_Loaded;
win.Closed += win_Closed;
win.ShowDialog();
}
void win_Closed(object sender, EventArgs e)
{
this.but.Visibility = Visibility.Visible;
}
void win_Loaded(object sender, RoutedEventArgs e)
{
this.but.Visibility = Visibility.Hidden;
}
好的,此代碼用於您后面的窗口代碼中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.