2012/2/9

(WPF) 在 WPF 視窗中開啟對話視窗 STEP BY STEP

在 WPF 程式中, 要開啟一個對話視窗的方法和在 Windows Form 裡面不太一樣。最顯著的差異, 在於 WPF 的 Button 控制項中並沒有 DialogResult 屬性可用。不過他們的基本原理還是差不多的。

以下我將示範如何在 WPF 加入對話視窗的祥細步驟。

步驟

1. 在你的專案中新增一個 WPF 視窗

 

2. 將這個新視窗取名為 Confirm (你可以自行命名; 但在此範例中此視窗將使用 Confirm 這個名稱)

 

3. 在 Confirm.xaml 檔案中加入如下的三個控制項

    <Grid Height="101" Width="301">
        <Label Content="You are about to leave this page. Are you sure?" Height="54" HorizontalAlignment="Left" Margin="12,12,0,0" Name="lbMessage" VerticalAlignment="Top" />
        <Button Content="I am sure" Height="23" HorizontalAlignment="Left" Margin="57,60,0,0" Name="btnOK" VerticalAlignment="Top" Width="75" Click="btnOK_Click" />
        <Button Content="Cancel" Height="23" HorizontalAlignment="Left" Margin="165,60,0,0" Name="btnCancel" VerticalAlignment="Top" Width="75" Click="btnCancel_Click" />
    </Grid>

請特別注意這三個新的控制項的 Name。在本範例中它們命名為 lbMessage, btnOK 與 btnCancel。

如果你這時候啟動除錯, 會看到兩個錯誤訊息。這是因為我們當未撰寫兩個按鈕的 Event Handler 的緣故。

你從 Visual Studio 設計畫面上應該可以看到本範例視窗的樣子, 如下所示。

你可以自行調整視窗大小以符合畫面。

 

4. 在 Confirm.xaml.cs 中加入以下程式碼:

private void btnOK_Click(object sender, RoutedEventArgs e)
{
    DialogResult = true;
}

private void btnCancel_Click(object sender, RoutedEventArgs e)
{
    DialogResult = false;
}

到此, Confirm 視窗的設計部份基本上已經完成了。

 

4. 為示範方便, 請在其它任意視窗中(在本範例中為 MainWindow.xaml)加入一個按鈕, 如下所示:

<Button Content="Ask Me!" Height="23" HorizontalAlignment="Left" Margin="24,41,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

 

5. 其 Event Handler 在 MainWindow.xaml.cs 中的對應程式碼如下:

Confirm confirm = new Confirm();
confirm.ShowDialog();
if (confirm.DialogResult.HasValue && confirm.DialogResult.Value)
{
    // Do anything you like
}

 

擴充功能

其實 DialogResult 回傳值在 WPF 中變成三值的 bool? 型別, 也就是 True, False 以及 Null。在以上的範例中我們應用了 True 與 False 兩個值。也就是說, 如果使用者按下 OK, 那麼程式就會執行我以 // Do anything you like 標示所在的程式碼。如果使用者按下 Cencel 按鈕或直接關閉視窗, 就什麼事也不做。

private void button1_Click(object sender, RoutedEventArgs e)
{
    Confirm confirm = new Confirm();
    confirm.ShowDialog();
    if (confirm.DialogResult.HasValue && confirm.DialogResult.Value)
            MessageBox.Show("You pressed OK!");
    else
            MessageBox.Show("You pressed Cancel!");
}

此外, 我也把程式稍為做了一些變化, 加入了一些屬性, 還有 Confirm 視窗的 Constructor 多載, 使得你可以更有彈性的使用 Confirm 視窗。例如, 你現在可以把原來的 new Confirm(); 這行指令改成如下:

Confirm confirm = new Confirm("你如果按下OK, 你之前打過的字都白打了喔!");

如此, 你就可以在不同程式中方便的選擇採用不同的顯示訊息。

這些小小的擴充功能都不影響原本的功能, 所以我就不一一解釋了。各位可以下載完整範例 (C#版本VB版本)自行研究。

沒有留言:

張貼留言