1. 程式人生 > >WPF 彈出對話方塊

WPF 彈出對話方塊

例子1:
假設有這樣兩個窗體:RootWindow,SubWindow,在RootWindow中引發某事件而顯示SubWindow(為工程目錄下 專案—新增視窗,名字為subwindow)
1,如果彈出窗體(比如SubWindow)僅僅是呼叫Show方法,並且沒有設定其Owner屬性:
ClassRootWindow
{
void Foo()
{
SubWindow sw = newSubWindow();
sw.Show();
}
}
那麼彈出窗體(SubWindow)和源窗體(如RootWindow)沒有任何層級關係,也就是說不會以模態方式呈現(SubWindow不會阻擋使用者對RootWindow的操作)。SubWindow在Show出來時在RootWindow的上方,但使用者可以通過滑鼠點選等方式將 RootWindow帶到SubWindow前方來而遮蓋RootWindow的內容,也就是說,享有使用者焦點的視窗將被帶到最前方。並且 RootWindow和SubWindow的最小化與還原操作互不影響。
2,如果彈出窗體(比如SubWindow)呼叫Show方法,並且設定了其Owner屬性:
ClassRootWindow
{
void Foo()
{
SubWindow sw = newSubWindow();
sw.Owner = this;
sw.Show();
}
}
那麼彈出窗體(SubWindow)和源窗體(如RootWindow)將有著父子關係,也就是說,彈出窗體將永遠在源窗體的上方,但並不是模式的,使用者可以操作源窗體,當源窗體被最小化或還原的時候,彈出窗體也將隨著最小化和還原,反之不成立。

3,如果彈出窗體(SubWindow)以ShowDialog的方式顯示,並且沒有設定其Owner屬性:
ClassRootWindow
{
voidFoo()
{
SubWindow sw = new SubWindow();
sw.ShowDialog();
}
}
彈出窗體將以模式的方式出現,但沒有父子關係,彈出窗體將阻止使用者對源窗體的操作,但點選源窗體時彈出窗體不會出現閃動效果。彈出窗體最小化時,源窗體會隨之最小化,但還原操作卻不可以(很奇怪)。這裡有一個值得注意的問題是:在此模式下,如果彈出窗體不在工作列顯示(ShowInTaskBar==false),而源窗體顯示在工作列,使用者的操作可能會導致彈出視窗被隱藏在源視窗背後而沒辦法切換出來(除非使用 Alt+TAB)。

4,如果彈出窗體(SubWindow)以ShowDialog的方式顯示,並且設定了其Owner屬性:
Class RootWindow
{
void Foo()
{
SubWindow sw = newSubWindow();
sw.Owner = this;
sw.ShowDialog();

}
彈出窗體將以模式的方式出現,並且有父子關係,彈出窗體將永遠處於源窗體上方,彈出窗體將阻止使用者對源窗體的操作,並且點選源窗體時彈出窗體會出現閃動效果。彈出窗體最小化或還原時,源窗體會隨之最小化或還原

例子2:
主視窗 後臺程式:
private void test(object sender, RoutedEventArgs e){
Window1 new_windows = new Window1(); //windows1 為新建的wpf視窗
new_windows.Owner = this;
new_windows.textbox_display.Text = “hello you”;
new_windows.child_form_handler += delegate(String a ,String b) {
呼叫委託 子視窗的委託,注意委託中的形參
MessageBox.Show(a + b );
};
new_windows.Show();
}
子視窗cs:
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
public delegate void child_form(String a,String b );
public event child_form child_form_handler;//定義委託
private void button1_click(object sender, RoutedEventArgs e)
{
String name_1 = textbox_name.Text.ToString();
String age_1 = textbox_age.Text.ToString();
child_form_handler(name_1,age_1) ;//執行會調函式
}
}
}
子視窗前臺介面:
這裡寫圖片描述

WPF 彈出確認框:

//定義訊息框
            string messageBoxText = "需要儲存嗎?";
            string caption = "HELLO";
            MessageBoxButton button = MessageBoxButton.YesNoCancel;
            MessageBoxImage icon = MessageBoxImage.Warning;
            //顯示訊息框
            MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button, icon);
            //處理訊息框資訊
            switch (result)
            {
                case MessageBoxResult.Yes:
                    // ...
                    break;
                case MessageBoxResult.No:
                    // ...
                    break;
                case MessageBoxResult.Cancel:
                    // ...
                    break;
            }