簡體   English   中英

如果另一個窗口已加載,則該按鈕將可見

[英]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中選擇Window1IsVisibleChanged ,並將按鈕的可見性設置為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類對象中有兩個LoadedClosed事件。

您需要為其訂閱兩個事件處理程序。 所有這些都在您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM