ダイアログ ボックスの概要Dialog Boxes Overview

スタンドアロン アプリケーションは通常、メイン ウィンドウが対象で、アプリケーションが動作して、を介してそのデータを処理する機能を公開、メイン データをあるユーザー インターフェイス (UI)user interface (UI)メカニズムは、メニュー バー、ツールバー、およびステータス バーと同様にします。Standalone applications typically have a main window that both displays the main data over which the application operates and exposes the functionality to process that data through ユーザー インターフェイス (UI)user interface (UI) mechanisms like menu bars, tool bars, and status bars. 重要なアプリケーションは、次のようなことをするための追加のウィンドウを表示することもあります。A non-trivial application may also display additional windows to do the following:

  • 固有の情報をユーザーに表示する。Display specific information to users.

  • ユーザーから情報を収集する。Gather information from users.

  • 情報の表示と収集の両方を行う。Both display and gather information.

これらの種類のウィンドウと呼ばれる* ダイアログ ボックス、し、2 種類があります: モーダルとモードレスです。These types of windows are known as *dialog boxes, and there are two types: modal and modeless.

Aモーダル関数には、引き続きユーザーからの追加データが必要がある場合、関数によってダイアログ ボックスが表示されます。A modal dialog box is displayed by a function when the function needs additional data from a user to continue. 機能は、モーダル ダイアログ ボックスに依存してデータを収集するため、モーダル ダイアログ ボックスが開いている間、ユーザーはアプリケーション内の他のウィンドウをアクティブ化することはできません。Because the function depends on the modal dialog box to gather data, the modal dialog box also prevents a user from activating other windows in the application while it remains open. ほとんどの場合、モーダル ダイアログ ボックスで、ユーザー キーを押して、モーダル ダイアログ ボックスを終了する場合はシグナルをOKまたはキャンセルボタンをクリックします。In most cases, a modal dialog box allows a user to signal when they have finished with the modal dialog box by pressing either an OK or Cancel button. キーを押して、 OKボタンは、こと、ユーザーがデータを入力し、データ処理を継続する関数を示します。Pressing the OK button indicates that a user has entered data and wants the function to continue processing with that data. キーを押して、キャンセルボタンは、ユーザーが、関数が完全に実行を停止することを示します。Pressing the Cancel button indicates that a user wants to stop the function from executing altogether. モーダル ダイアログ ボックスの最も一般的な例は、データを開く、保存する、および印刷するために表示されます。The most common examples of modal dialog boxes are shown to open, save, and print data.

Aモードレスダイアログ ボックスで、その一方は防止しません、ユーザーが開いている間、他のウィンドウをアクティブ化します。A modeless dialog box, on the other hand, does not prevent a user from activating other windows while it is open. たとえば、ユーザーがドキュメント内の特定の単語の出現箇所を検索する場合、メイン ウィンドウは、多くの場合、ダイアログ ボックスを開いて、検索する単語をユーザーに尋ねます。For example, if a user wants to find occurrences of a particular word in a document, a main window will often open a dialog box to ask a user what word they are looking for. しかし、単語の検索中もユーザーはドキュメントを編集できるため、ダイアログ ボックスがモーダルである必要はありません。Since finding a word doesn't prevent a user from editing the document, however, the dialog box doesn't need to be modal. モードレス ダイアログ ボックスは、少なくとも、閉じる ダイアログ ボックスを閉じるボタンをクリックしなどの特定の機能を実行するその他のボタンを提供する場合があります、次を検索ボタン、次へ を検索する単語が単語の検索の検索条件に一致します。A modeless dialog box at least provides a Close button to close the dialog box, and may provide additional buttons to execute specific functions, such as a Find Next button to find the next word that matches the find criteria of a word search.

Windows Presentation Foundation (WPF) では、ダイアログ ボックス、メッセージ ボックス、コモン ダイアログ ボックス、およびカスタム ダイアログ ボックスなどのいくつかの種類を作成することができます。Windows Presentation Foundation (WPF) allows you to create several types of dialog boxes, including message boxes, common dialog boxes, and custom dialog boxes. このトピックでは、それぞれ、ダイアログ ボックスのサンプル一致する例を示します。This topic discusses each, and the Dialog Box Sample provides matching examples.

メッセージ ボックスMessage Boxes

Aメッセージ ボックステキストの情報を表示し、ボタンを持つ意思決定を行うようにするために使用できるダイアログ ボックスです。A message box is a dialog box that can be used to display textual information and to allow users to make decisions with buttons. 次の図は、テキスト情報と質問を表示して、ユーザーが質問に回答するための 3 つのボタンを表示するメッセージ ボックスを示しています。The following figure shows a message box that displays textual information, asks a question, and provides the user with three buttons to answer the question.

[Word Processor] ダイアログ ボックスWord Processor dialog box

使用するメッセージ ボックスを作成する、MessageBoxクラスです。To create a message box, you use the MessageBox class. MessageBox メッセージ ボックスのテキスト、タイトル、アイコン、およびボタンは、次のようにコードを使用して構成することができます。MessageBox lets you configure the message box text, title, icon, and buttons, using code like the following.

// Configure the message box to be displayed
string messageBoxText = "Do you want to save changes?";
string caption = "Word Processor";
MessageBoxButton button = MessageBoxButton.YesNoCancel;
MessageBoxImage icon = MessageBoxImage.Warning;
' Configure the message box to be displayed
Dim messageBoxText As String = "Do you want to save changes?"
Dim caption As String = "Word Processor"
Dim button As MessageBoxButton = MessageBoxButton.YesNoCancel
Dim icon As MessageBoxImage = MessageBoxImage.Warning

表示するには、メッセージ ボックスを呼び出す、 static Showメソッドを次のコードに示すようにします。To show a message box, you call the staticShow method, as demonstrated in the following code.

// Display message box
MessageBox.Show(messageBoxText, caption, button, icon);
' Display message box
MessageBox.Show(messageBoxText, caption, button, icon)

メッセージ ボックスを表示するコードで、ユーザーの決定 (どのボタンが押されたか) を検出して処理する必要があるときには、コードは、次のコードに示されているように、メッセージ ボックスの結果を検査できます。When code that shows a message box needs to detect and process the user's decision (which button was pressed), the code can inspect the message box result, as shown in the following code.

// Display message box
MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button, icon);

// Process message box results
switch (result)
{
    case MessageBoxResult.Yes:
        // User pressed Yes button
        // ...
        break;
    case MessageBoxResult.No:
        // User pressed No button
        // ...
        break;
    case MessageBoxResult.Cancel:
        // User pressed Cancel button
        // ...
        break;
}
' Display message box
Dim result As MessageBoxResult = MessageBox.Show(messageBoxText, caption, button, icon)

' Process message box results
Select Case result
    Case MessageBoxResult.Yes
        ' User pressed Yes button
        ' ...
    Case MessageBoxResult.No
        ' User pressed No button
        ' ...
    Case MessageBoxResult.Cancel
        ' User pressed Cancel button
        ' ...
End Select

メッセージ ボックスの使用の詳細については、次を参照してください。 MessageBoxMessageBox サンプル、およびダイアログ ボックスのサンプルです。For more information on using message boxes, see MessageBox, MessageBox Sample, and Dialog Box Sample.

MessageBox単純なダイアログ ボックス ユーザー エクスペリエンスを使用する利点を提供することがありますMessageBox部分信頼セキュリティ サンド ボックス内で実行されるアプリケーションで表示できるウィンドウの唯一の型では、(を参照してくださいセキュリティ) などXAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs)です。Although MessageBox may offer a simple dialog box user experience, the advantage of using MessageBox is that is the only type of window that can be shown by applications that run within a partial trust security sandbox (see Security), such as XAML ブラウザー アプリケーション (XBAP)XAML browser applications (XBAPs).

ほとんどのダイアログ ボックスは、テキスト、選択 (チェック ボックス)、相互に排他的な選択 (オプション ボタン)、リスト選択 (リスト ボックス、コンボ ボックス、ドロップダウン リスト ボックス) など、メッセージ ボックスの結果よりも複雑なデータを表示し、収集します。Most dialog boxes display and gather more complex data than the result of a message box, including text, selection (check boxes), mutually exclusive selection (radio buttons), and list selection (list boxes, combo boxes, drop-down list boxes). これらの場合 Windows Presentation Foundation (WPF) はいくつかの一般的なダイアログ ボックスを提供し、いずれかの使用は完全信頼で実行されているアプリケーションに限定されますが、独自のダイアログ ボックスを作成することができます。 します。For these, Windows Presentation Foundation (WPF) provides several common dialog boxes and allows you to create your own dialog boxes, although the use of either is limited to applications running with full trust.

コモン ダイアログ ボックスCommon Dialog Boxes

WindowsWindows は、ファイルを開く、ファイルを保存する、印刷するためのダイアログ ボックスなど、すべてのアプリケーションに共通の、さまざまな再利用可能なダイアログ ボックスを実装します。 implements a variety of reusable dialog boxes that are common to all applications, including dialog boxes for opening files, saving files, and printing. これらのダイアログ ボックスはオペレーティング システムによって実装されるため、そのオペレーティング システム上で実行するすべてのアプリケーション間で共有でき、ユーザー エクスペリエンスの一貫性を保つことができます。ユーザーが 1 つのアプリケーションで、オペレーティング システムによって提供されるダイアログ ボックスの使用に慣れると、他のアプリケーションでも、そのダイアログ ボックスの使用法を学ぶ必要はありません。Since these dialog boxes are implemented by the operating system, they can be shared among all the applications that run on the operating system, which helps user experience consistency; when users are familiar with the use of an operating system-provided dialog box in one application, they don't need to learn how to use that dialog box in other applications. これらのダイアログ ボックスはすべてのアプリケーションで使用され、一貫性のあるユーザー エクスペリエンスを提供するのに役立つ、ために、それらと呼ばれます。コモン ダイアログ ボックスです。Because these dialog boxes are available to all applications and because they help provide a consistent user experience, they are known as common dialog boxes.

Windows Presentation Foundation (WPF)、開いているファイルをカプセル化、保存ファイル、および印刷コモン ダイアログ ボックス、およびそれらがスタンドアロン アプリケーションで使用するためのマネージ クラスを公開します。Windows Presentation Foundation (WPF) encapsulates the open file, save file, and print common dialog boxes and exposes them as managed classes for you to use in standalone applications. このトピックでは、それぞれの概要を簡単に説明します。This topic provides a brief overview of each.

[ファイルを開く] ダイアログ ボックスOpen File Dialog

[ファイルを開く] ダイアログ ボックスは、次の図に示されているように、開くファイルの名前を取得するために、ファイルを開く機能によって使用されます。The open file dialog box, shown in the following figure, is used by file opening functionality to retrieve the name of a file to open.

[開く] ダイアログ ボックスOpen dialog box

一般的なファイルを開く ダイアログ ボックスとして実装されている、OpenFileDialogクラスし、内にある、Microsoft.Win32名前空間。The common open file dialog box is implemented as the OpenFileDialog class and is located in the Microsoft.Win32 namespace. 次のコードは、[ファイルを開く] ダイアログ ボックスの作成、構成、および表示の方法と、結果を処理する方法を示しています。The following code shows how to create, configure, and show one, and how to process the result.

// Configure open file dialog box
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".txt"; // Default file extension
dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension

// Show open file dialog box
Nullable<bool> result = dlg.ShowDialog();

// Process open file dialog box results
if (result == true)
{
    // Open document
    string filename = dlg.FileName;
}
' Configure open file dialog box
Dim dlg As New Microsoft.Win32.OpenFileDialog()
dlg.FileName = "Document" ' Default file name
dlg.DefaultExt = ".txt" ' Default file extension
dlg.Filter = "Text documents (.txt)|*.txt" ' Filter files by extension

' Show open file dialog box
Dim result? As Boolean = dlg.ShowDialog()

' Process open file dialog box results
If result = True Then
    ' Open document
    Dim filename As String = dlg.FileName
End If

ファイルを開く ダイアログ ボックスの詳細については、次を参照してください。Microsoft.Win32.OpenFileDialogです。For more information on the open file dialog box, see Microsoft.Win32.OpenFileDialog.

注意

OpenFileDialog ファイル名を安全に取得する部分的な信頼で実行されているアプリケーションで使用できます (を参照してくださいセキュリティ)。OpenFileDialog can be used to safely retrieve file names by applications running with partial trust (see Security).

[ファイルの保存] ダイアログ ボックスSave File Dialog Box

[ファイルの保存] ダイアログ ボックスは、次の図に示されているように、保存するファイルの名前を取得するために、ファイルを保存する機能によって使用されます。The save file dialog box, shown in the following figure, is used by file saving functionality to retrieve the name of a file to save.

[名前を付けて保存] ダイアログ ボックスSave As dialog box

一般的な保存ファイル ダイアログ ボックスとして実装、SaveFileDialogクラス、および内にある、Microsoft.Win32名前空間。The common save file dialog box is implemented as the SaveFileDialog class, and is located in the Microsoft.Win32 namespace. 次のコードは、[ファイルを開く] ダイアログ ボックスの作成、構成、および表示の方法と、結果を処理する方法を示しています。The following code shows how to create, configure, and show one, and how to process the result.

// Configure save file dialog box
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document"; // Default file name
dlg.DefaultExt = ".txt"; // Default file extension
dlg.Filter = "Text documents (.txt)|*.txt"; // Filter files by extension

// Show save file dialog box
Nullable<bool> result = dlg.ShowDialog();

// Process save file dialog box results
if (result == true)
{
    // Save document
    string filename = dlg.FileName;
}
' Configure save file dialog box
Dim dlg As New Microsoft.Win32.SaveFileDialog()
dlg.FileName = "Document" ' Default file name
dlg.DefaultExt = ".txt" ' Default file extension
dlg.Filter = "Text documents (.txt)|*.txt" ' Filter files by extension

' Show save file dialog box
Dim result? As Boolean = dlg.ShowDialog()

' Process save file dialog box results
If result = True Then
    ' Save document
    Dim filename As String = dlg.FileName
End If

保存の詳細については [ファイル] ダイアログ ボックスを参照してくださいMicrosoft.Win32.SaveFileDialogです。For more information on the save file dialog box, see Microsoft.Win32.SaveFileDialog.

次の図に示されているように、[印刷] ダイアログ ボックスは、ユーザーがデータを印刷するプリンターを選択し、構成するために、印刷機能によって使用されます。The print dialog box, shown in the following figure, is used by printing functionality to choose and configure the printer that a user would like to print data to.

[印刷] ダイアログ ボックスPrint dialog box

一般的な印刷ダイアログ ボックスは、PrintDialogクラス、および内にある、System.Windows.Controls名前空間。The common print dialog box is implemented as the PrintDialog class, and is located in the System.Windows.Controls namespace. 次のコードは、[印刷] ダイアログ ボックスの作成、構成、および表示の方法を示しています。The following code shows how to create, configure, and show one.

// Configure printer dialog box
System.Windows.Controls.PrintDialog dlg = new System.Windows.Controls.PrintDialog();
dlg.PageRangeSelection = PageRangeSelection.AllPages;
dlg.UserPageRangeEnabled = true;

// Show save file dialog box
Nullable<bool> result = dlg.ShowDialog();

// Process save file dialog box results
if (result == true)
{
    // Print document
}
' Configure printer dialog box
Dim dlg As New PrintDialog()
dlg.PageRangeSelection = PageRangeSelection.AllPages
dlg.UserPageRangeEnabled = True

' Show save file dialog box
Dim result? As Boolean = dlg.ShowDialog()

' Process save file dialog box results
If result = True Then
    ' Print document
End If

詳細については、[印刷] ダイアログ ボックスで、次を参照してください。System.Windows.Controls.PrintDialogです。For more information on the print dialog box, see System.Windows.Controls.PrintDialog. 印刷の詳細についてはWPFWPFを参照してください印刷の概要です。For detailed discussion of printing in WPFWPF, see Printing Overview.

カスタム ダイアログ ボックスCustom Dialog Boxes

コモン ダイアログ ボックスは便利であり、可能なときにはコモン ダイアログ ボックスを使用する必要がありますが、ドメイン固有のダイアログ ボックスの要件はサポートしていません。While common dialog boxes are useful, and should be used when possible, they do not support the requirements of domain-specific dialog boxes. このような場合は、独自のダイアログ ボックスを作成する必要があります。In these cases, you need to create your own dialog boxes. これから説明するように、ダイアログ ボックスは、特殊な動作を持つウィンドウです。As we'll see, a dialog box is a window with special behaviors. Window これらの動作を実装して、その結果を使用するWindowカスタム モーダルとモードレスのダイアログ ボックスを作成します。Window implements those behaviors and, consequently, you use Window to create custom modal and modeless dialog boxes.

モーダルのカスタム ダイアログ ボックスの作成Creating a Modal Custom Dialog Box

このトピックは、使用する方法を示しますWindow、通常のモーダル ダイアログ ボックスの実装を作成するを使用して、Margins例として、ダイアログ ボックス (を参照してくださいダイアログ ボックスのサンプル)。This topic shows how to use Window to create a typical modal dialog box implementation, using the Margins dialog box as an example (see Dialog Box Sample). Margins ダイアログ ボックスが次の図に示すようにします。The Margins dialog box is shown in the following figure.

[余白] ダイアログ ボックスMargins dialog box

モーダル ダイアログ ボックスの構成Configuring a Modal Dialog Box

一般的なダイアログ ボックスのユーザー インターフェイスには、次の項目が含まれます。The user interface for a typical dialog box includes the following:

  • 必要なデータを収集するために必要なさまざまなコントロール。The various controls that are required to gather the desired data.

  • 表示、 OKボタン ユーザーがクリックすると、関数に戻り、ダイアログ ボックスを閉じるし、処理を続行します。Showing an OK button that users click to close the dialog box, return to the function, and continue processing.

  • 表示、キャンセル ダイアログ ボックスを閉じるし、関数の処理を停止するユーザーがクリックしたボタンをクリックします。Showing a Cancel button that users click to close the dialog box and stop the function from further processing.

  • 表示、閉じるタイトル バーのボタンをクリックします。Showing a Close button in the title bar.

  • アイコンの表示。Showing an icon.

  • 表示最小化最大化、および復元ボタン。Showing Minimize, Maximize, and Restore buttons.

  • 表示、システムメニューを最小限に抑える、最大化、復元、およびダイアログ ボックスを閉じます。Showing a System menu to minimize, maximize, restore, and close the dialog box.

  • ダイアログ ボックスは、ダイアログ ボックスを開いたウィンドウの上と中央に開きます。Opening above and in the center of the window that opened the dialog box.

  • ダイアログ ボックスは、可能な場合はサイズ変更可能である必要があるため、ダイアログ ボックスが小さくなりすぎるのを避け、便利な既定サイズをユーザーに提供するために、既定の寸法と最小寸法の両方を設定する必要があります。Dialog boxes should be resizable where possible so, to prevent the dialog box from being too small, and to provide the user with a useful default size, you need to set both default and a minimum dimensions respectively.

  • 原因となるショートカットとして構成する必要があります、ESC キーを押して、キャンセル ボタンを押します。Pressing the ESC key should be configured as a keyboard shortcut that causes the Cancel button to be pressed. これを実現するには、IsCancelのプロパティ、キャンセル ボタンをクリックしてtrueです。This is achieved by setting the IsCancel property of the Cancel button to true.

  • 原因となるショートカットとして構成する必要がありますを入力してください (または戻り値) のキーを押して、 OK ボタンを押します。Pressing the ENTER (or RETURN) key should be configured as a keyboard shortcut that causes the OK button to be pressed. これを実現するには、IsDefaultのプロパティ、 OKボタンtrueです。This is achieved by setting the IsDefault property of the OK button true.

次のコードは、この構成の例を示しています。The following code demonstrates this configuration.


<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.MarginsDialogBox"
    xmlns:local="clr-namespace:SDKSample"
    Title="Margins"
    Height="190"
    Width="300"
    MinHeight="10"
    MinWidth="300"
    ResizeMode="CanResizeWithGrip"
    ShowInTaskbar="False"
    WindowStartupLocation="CenterOwner" 
    FocusManager.FocusedElement="{Binding ElementName=leftMarginTextBox}">

  <Grid>
    <!-- Accept or Cancel -->
    <StackPanel Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="4">
      <Button Name="okButton" Click="okButton_Click" IsDefault="True">OK</Button>
      <Button Name="cancelButton" IsCancel="True">Cancel</Button>
    </StackPanel>

  </Grid >

</Window>
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {
        public MarginsDialogBox()
        {
            InitializeComponent();
        }
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample


Public Class MarginsDialogBox
    Inherits Window
    Public Sub New()
        Me.InitializeComponent()
    End Sub
    }
}
End Class

End Namespace

ダイアログ ボックスのユーザー エクスペリエンスは、ダイアログ ボックスを開くウィンドウのメニュー バーにも及びます。The user experience for a dialog box also extends into the menu bar of the window that opens the dialog box. メニュー項目が、機能の続行には、ダイアログ ボックスでのユーザーの操作を必要とする機能を実行するときには、次に示されているように、その機能のメニュー項目の見出しに省略記号を付けます。When a menu item runs a function that requires user interaction through a dialog box before the function can continue, the menu item for the function will have an ellipsis in its header, as shown here.

<!--Main Window-->
<MenuItem Name="formatMarginsMenuItem" Header="_Margins..." Click="formatMarginsMenuItem_Click" />

メニュー項目が、[バージョン情報] ダイアログ ボックスなど、ユーザーの操作を必要としないダイアログ ボックスを表示する機能を実行するときには、省略記号は必要ありません。When a menu item runs a function that displays a dialog box which does not require user interaction, such as an About dialog box, an ellipsis is not required.

モーダル ダイアログ ボックスを開くOpening a Modal Dialog Box

ダイアログ ボックスは、通常、ワード プロセッサでドキュメントの余白を設定するなど、ドメイン固有の機能を実行するためにユーザーがメニュー項目を選択した結果として表示されます。A dialog box is typically shown as a result of a user selecting a menu item to perform a domain-specific function, such as setting the margins of a document in a word processor. ウィンドウをダイアログ ボックスとして表示するのは、通常のウィンドウを表示するのと同様ですが、ダイアログ ボックス固有の追加の構成が必要です。Showing a window as a dialog box is similar to showing a normal window, although it requires additional dialog box-specific configuration. ダイアログ ボックスのインスタンス化、構成、および開くプロセスの全体を、次のコードに示します。The entire process of instantiating, configuring, and opening a dialog box is shown in the following code.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {

Imports System
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample

Public Class MainWindow
    Inherits Window
void formatMarginsMenuItem_Click(object sender, RoutedEventArgs e)
{
    // Instantiate the dialog box
    MarginsDialogBox dlg = new MarginsDialogBox();

    // Configure the dialog box
    dlg.Owner = this;
    dlg.DocumentMargin = this.documentTextBox.Margin;

    // Open the dialog box modally 
    dlg.ShowDialog();

Private Sub formatMarginsMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Instantiate the dialog box
    Dim dlg As New MarginsDialogBox

    ' Configure the dialog box
    dlg.Owner = Me
    dlg.DocumentMargin = Me.documentTextBox.Margin

    ' Open the dialog box modally 
    dlg.ShowDialog()

}
End Sub
    }
}
End Class

End Namespace

ここでは、コードは、既定の情報 (現在の余白) をダイアログ ボックスに渡しています。Here, the code is passing default information (the current margins) to the dialog box. 設定されるも、 Window.Owner ダイアログ ボックスが表示されているウィンドウへの参照を持つプロパティです。It is also setting the Window.Owner property with a reference to the window that is showing the dialog box. 一般に、必ず設定してすべてのダイアログ ボックスに共通するウィンドウの状態関連の動作を提供する ダイアログ ボックスの所有者 (を参照してくださいWPF Windows 概要詳細については)。In general, you should always set the owner for a dialog box to provide window state-related behaviors that are common to all dialog boxes (see WPF Windows Overview for more information).

注意

サポートするために所有者を指定する必要がありますユーザー インターフェイス (UI)user interface (UI) ダイアログ ボックスのオートメーション (を参照してくださいUI オートメーションの概要)。You must provide an owner to support ユーザー インターフェイス (UI)user interface (UI) automation for dialog boxes (see UI Automation Overview).

呼び出しでモーダルとして表示されます ダイアログ ボックスを構成した後、ShowDialogメソッドです。After the dialog box is configured, it is shown modally by calling the ShowDialog method.

ユーザー指定データの検証Validating User-Provided Data

ダイアログ ボックスが開かれ、ユーザーが必要なデータを指定すると、ダイアログ ボックスは、指定されたデータが有効であることを確認する必要があります。これは、次のような理由からです。When a dialog box is opened and the user provides the required data, a dialog box is responsible for ensuring that the provided data is valid for the following reasons:

  • セキュリティの観点から、すべての入力を検証する必要があります。From a security perspective, all input should be validated.

  • ドメイン固有の観点から、データの検証は、誤ったデータがコードによって処理されて、例外がスローされるのを防ぎます。From a domain-specific perspective, data validation prevents erroneous data from being processed by the code, which could potentially throw exceptions.

  • ユーザー エクスペリエンスの観点から、ダイアログ ボックスは、入力したデータが無効であることを示すことによって、ユーザーを支援できます。From a user-experience perspective, a dialog box can help users by showing them which data they have entered is invalid.

  • パフォーマンスの観点から、多層アプリケーションでのデータの検証は、特に、アプリケーションが Web サービスまたはサーバーベースのデータベースで構成される場合、クライアント層とアプリケーション層の間のラウンド トリップの回数を減らすことができます。From a performance perspective, data validation in a multi-tier application can reduce the number of round trips between the client and the application tiers, particularly when the application is composed of Web services or server-based databases.

バインドされたコントロールを検証するWPFWPF、検証規則を定義し、バインドに関連付ける必要があります。To validate a bound control in WPFWPF, you need to define a validation rule and associate it with the binding. 検証規則はから派生するカスタム クラスValidationRuleです。A validation rule is a custom class that derives from ValidationRule. 次の例では、検証規則、 MarginValidationRule、バインドされた値は、どのチェック、Doubleと指定された範囲内にあります。The following example shows a validation rule, MarginValidationRule, which checks that a bound value is a Double and is within a specified range.

using System.Globalization;
using System.Windows.Controls;

namespace SDKSample
{
    public class MarginValidationRule : ValidationRule
    {
        double minMargin;
        double maxMargin;

        public double MinMargin
        {
            get { return this.minMargin; }
            set { this.minMargin = value; }
        }

        public double MaxMargin
        {
            get { return this.maxMargin; }
            set { this.maxMargin = value; }
        }

        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            double margin;

            // Is a number?
            if (!double.TryParse((string)value, out margin))
            {
                return new ValidationResult(false, "Not a number.");
            }

            // Is in range?
            if ((margin < this.minMargin) || (margin > this.maxMargin))
            {
                string msg = string.Format("Margin must be between {0} and {1}.", this.minMargin, this.maxMargin);
                return new ValidationResult(false, msg);
            }

            // Number is valid
            return new ValidationResult(true, null);
        }
    }
}
Imports System.Globalization
Imports System.Windows.Controls

Namespace SDKSample

Public Class MarginValidationRule
    Inherits ValidationRule

    Private _maxMargin As Double
    Private _minMargin As Double

    Public Property MaxMargin() As Double
        Get
            Return Me._maxMargin
        End Get
        Set(ByVal value As Double)
            Me._maxMargin = value
        End Set
    End Property

    Public Property MinMargin() As Double
        Get
            Return Me._minMargin
        End Get
        Set(ByVal value As Double)
            Me._minMargin = value
        End Set
    End Property

    Public Overrides Function Validate(ByVal value As Object, ByVal cultureInfo As CultureInfo) As ValidationResult

        Dim margin As Double

        ' Is a number?
        If Not Double.TryParse(CStr(value), margin) Then
            Return New ValidationResult(False, "Not a number.")
        End If

        ' Is in range?
        If ((margin < Me.MinMargin) OrElse (margin > Me.MaxMargin)) Then
            Dim msg As String = String.Format("Margin must be between {0} and {1}.", Me.MinMargin, Me.MaxMargin)
            Return New ValidationResult(False, msg)
        End If

        ' Number is valid
        Return New ValidationResult(True, Nothing)

    End Function

End Class

End Namespace

オーバーライドすることでこのコードで、検証規則の検証ロジックが実装されている、Validateメソッドでは、データを検証し、適切な返しますValidationResultです。In this code, the validation logic of a validation rule is implemented by overriding the Validate method, which validates the data and returns an appropriate ValidationResult.

検証規則をバインド コントロールに関連付けるには、次のマークアップを使用します。To associate the validation rule with the bound control, you use the following markup.

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="SDKSample.MarginsDialogBox"
    xmlns:local="clr-namespace:SDKSample"
    Title="Margins"
    Height="190"
    Width="300"
    MinHeight="10"
    MinWidth="300"
    ResizeMode="CanResizeWithGrip"
    ShowInTaskbar="False"
    WindowStartupLocation="CenterOwner" 
    FocusManager.FocusedElement="{Binding ElementName=leftMarginTextBox}">

  <Grid>
    
<Label Grid.Column="0" Grid.Row="0">Left Margin:</Label>
<TextBox Name="leftMarginTextBox" Grid.Column="1" Grid.Row="0">
  <TextBox.Text>
    <Binding Path="Left" UpdateSourceTrigger="PropertyChanged">
      <Binding.ValidationRules>
        <local:MarginValidationRule MinMargin="0" MaxMargin="10" />
      </Binding.ValidationRules>
    </Binding>
  </TextBox.Text>
</TextBox>
</Window>

検証規則が関連付けられているWPFWPF自動的に適用されますが、バインドされたコントロールにデータが入力されるとします。Once the validation rule is associated, WPFWPF will automatically apply it when data is entered into the bound control. コントロールには、無効なデータが含まれているWPFWPF次の図に示すように、無効なコントロール周囲に赤い境界線が表示されます。When a control contains invalid data, WPFWPF will display a red border around the invalid control, as shown in the following figure.

無効な左余白Invalid left margin

WPFWPF は、ユーザーが有効なデータを入力するまで、ユーザーを無効なコントロールに制限するわけではありません。 does not restrict a user to the invalid control until they have entered valid data. これは、ダイアログ ボックスとして適切な動作です。データが有効かどうかにかかわらず、ユーザーはダイアログ ボックス内のコントロールを自由に移動できる必要があります。This is good behavior for a dialog box; a user should be able to freely navigate the controls in a dialog box whether or not data is valid. ただし、これは、無効なデータとキーを押して、ユーザーが入力、 OKボタンをクリックします。However, this means a user can enter invalid data and press the OK button. このため、コードも必要があるダイアログ内のすべてのコントロールを検証するときにボックス、 [ok] ボタンを処理することにより、Clickイベント。For this reason, your code also needs to validate all controls in a dialog box when the OK button is pressed by handling the Click event.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample


Public Class MarginsDialogBox
    Inherits Window
void okButton_Click(object sender, RoutedEventArgs e)
{
    // Don't accept the dialog box if there is invalid data
    if (!IsValid(this)) return;
Private Sub okButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Don't accept the dialog box if there is invalid data
    If Not Me.IsValid(Me) Then Return
        }

        // Validate all dependency objects in a window
        bool IsValid(DependencyObject node)
        {
            // Check if dependency object was passed
            if (node != null)
            {
                // Check if dependency object is valid.
                // NOTE: Validation.GetHasError works for controls that have validation rules attached 
                bool isValid = !Validation.GetHasError(node);
                if (!isValid)
                {
                    // If the dependency object is invalid, and it can receive the focus,
                    // set the focus
                    if (node is IInputElement) Keyboard.Focus((IInputElement)node);
                    return false;
                }
            }

            // If this dependency object is valid, check all child dependency objects
            foreach (object subnode in LogicalTreeHelper.GetChildren(node))
            {
                if (subnode is DependencyObject)
                {   
                    // If a child dependency object is invalid, return false immediately,
                    // otherwise keep checking
                    if (IsValid((DependencyObject)subnode) == false) return false;
                }
            }

            // All dependency objects are valid
            return true;
        }
    }
}
    End Sub

    ' Validate all dependency objects in a window
    Private Function IsValid(ByVal node As DependencyObject) As Boolean

        ' Check if dependency object was passed and if dependency object is valid.
        ' NOTE: Validation.GetHasError works for controls that have validation rules attached 
        If ((Not node Is Nothing) AndAlso Validation.GetHasError(node)) Then
            ' If the dependency object is invalid, and it can receive the focus,
            ' set the focus
            If TypeOf node Is IInputElement Then
                Keyboard.Focus(DirectCast(node, IInputElement))
            End If
            Return False
        End If

        ' If this dependency object is valid, check all child dependency objects
        Dim subnode As Object
        For Each subnode In LogicalTreeHelper.GetChildren(node)
            If (TypeOf subnode Is DependencyObject AndAlso Not Me.IsValid(DirectCast(subnode, DependencyObject))) Then
                ' If a child dependency object is invalid, return false immediately,
                ' otherwise keep checking
                Return False
            End If
        Next

        ' All dependency objects are valid
        Return True

    End Function

End Class

End Namespace

このコードは、ウィンドウ上のすべての依存関係オブジェクトを列挙し、いずれかが有効ではない場合 (によって返されるGetHasError、無効なコントロールがフォーカスを取得、IsValidメソッドを返します。 false、ウィンドウは無効とみなされるとします。This code enumerates all dependency objects on a window and, if any are invalid (as returned by GetHasError, the invalid control gets the focus, the IsValid method returns false, and the window is considered invalid.

ダイアログ ボックスが有効な場合は、安全に閉じて、戻ることができます。Once a dialog box is valid, it can safely close and return. 復帰プロセスの一環として、呼び出し元の機能に結果を返す必要があります。As part of the return process, it needs to return a result to the calling function.

モーダル ダイアログ ボックスの結果を設定するSetting the Modal Dialog Result

使用してダイアログ ボックスを開くShowDialogメソッドを呼び出す場合と基本的には: コードを使用して、ダイアログ ボックスを開いたShowDialogまでを待ちますShowDialogを返します。Opening a dialog box using ShowDialog is fundamentally like calling a method: the code that opened the dialog box using ShowDialog waits until ShowDialog returns. ときにShowDialogを返します、呼び出し元のコードが必要かどうかに基づくした処理を続行するか、処理を停止するかどうかを決定する場合は、ユーザーが押された、 [ok] ボタンまたはキャンセルボタンをクリックします。When ShowDialog returns, the code that called it needs to decide whether to continue processing or stop processing, based on whether the user pressed the OK button or the Cancel button. としてユーザーの選択を返す必要があります ダイアログ ボックスをこの決定を容易にする、Booleanから返される値、ShowDialogメソッドです。To facilitate this decision, the dialog box needs to return the user's choice as a Boolean value that is returned from the ShowDialog method.

ときに、 OKボタンをクリックすると、ShowDialog返す必要がありますtrueです。When the OK button is clicked, ShowDialog should return true. これを実現するには、DialogResultプロパティ ダイアログ ボックスのボックス、 [ok] ボタンをクリックします。This is achieved by setting the DialogResult property of the dialog box when the OK button is clicked.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample


Public Class MarginsDialogBox
    Inherits Window
void okButton_Click(object sender, RoutedEventArgs e)
{
Private Sub okButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    // Dialog box accepted
    this.DialogResult = true;
}
    ' Dialog box accepted
    MyBase.DialogResult = New Nullable(Of Boolean)(True)
End Sub
    }
}
End Class

End Namespace

その設定に注意してください、DialogResultプロパティを明示的に呼び出す必要性が軽減されるウィンドウを自動的に閉じるをによりもCloseします。Note that setting the DialogResult property also causes the window to close automatically, which alleviates the need to explicitly call Close.

ときに、キャンセルボタンをクリックすると、ShowDialog返す必要がありますfalseの設定も必要があります、DialogResultプロパティです。When the Cancel button is clicked, ShowDialog should return false, which also requires setting the DialogResult property.

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace SDKSample
{
    public partial class MarginsDialogBox : Window
    {
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Input

Namespace SDKSample


Public Class MarginsDialogBox
    Inherits Window
void cancelButton_Click(object sender, RoutedEventArgs e)
{
    // Dialog box canceled
    this.DialogResult = false;
}
Private Sub cancelButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    ' Dialog box canceled
    Me.DialogResult = False
End Sub
    }
}
End Class

End Namespace

ときに、ボタンのIsCancelプロパティに設定されているtrueいずれかを押すと、キャンセルボタンまたは ESC キーDialogResultに自動的に設定されているfalseです。When a button's IsCancel property is set to true and the user presses either the Cancel button or the ESC key, DialogResult is automatically set to false. 次のマークアップが上記のコードで処理する必要がない場合と同様、Clickイベント。The following markup has the same effect as the preceding code, without the need to handle the Click event.

<Button Name="cancelButton" IsCancel="True">Cancel</Button>

ダイアログ ボックスが自動的に返しますfalse、ユーザーが押したとき、閉じるタイトル バー ボタンをクリックするか、閉じるからメニュー項目、システムメニュー。A dialog box automatically returns false when a user presses the Close button in the title bar or chooses the Close menu item from the System menu.

モーダル ダイアログ ボックスから返されたデータの処理Processing Data Returned from a Modal Dialog Box

ときにDialogResult設定されているダイアログ ボックスでは、によって開いたとき、関数は、検査することによってダイアログ ボックスの結果を取得できます、DialogResultプロパティとShowDialogを返します。When DialogResult is set by a dialog box, the function that opened it can get the dialog box result by inspecting the DialogResult property when ShowDialog returns.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {

Imports System
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample

Public Class MainWindow
    Inherits Window
void formatMarginsMenuItem_Click(object sender, RoutedEventArgs e)
{
Private Sub formatMarginsMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    // Process data entered by user if dialog box is accepted
    if (dlg.DialogResult == true)
    {
        // Update fonts
        this.documentTextBox.Margin = dlg.DocumentMargin;
    }
}
    ' Process data entered by user if dialog box is accepted
    If (dlg.DialogResult.GetValueOrDefault = True) Then
        Me.documentTextBox.Margin = dlg.DocumentMargin
    End If
End Sub
    }
}
End Class

End Namespace

ダイアログの結果が場合true、関数として使用するキューを取得して、ユーザーによって提供されるデータを処理します。If the dialog result is true, the function uses that as a cue to retrieve and process the data provided by the user.

注意

後にShowDialogが返されると、ダイアログ ボックスを再度開くことはできません。After ShowDialog has returned, a dialog box cannot be reopened. 代わりに、新しいインスタンスを作成する必要があります。Instead, you need to create a new instance.

ダイアログの結果が場合false関数が適切に処理を終了する必要があります。If the dialog result is false, the function should end processing appropriately.

モードレス カスタム ダイアログ ボックスの作成Creating a Modeless Custom Dialog Box

次の図に示されている [検索] ダイアログ ボックスなどのモードレス ダイアログ ボックスは、基本的な外観はモーダル ダイアログ ボックスと同じです。A modeless dialog box, such as the Find Dialog Box shown in the following figure, has the same fundamental appearance as the modal dialog box.

[検索] ダイアログ ボックスFind dialog box

しかし、次のセクションで説明するように、動作は少し異なります。However, the behavior is slightly different, as described in the following sections.

モードレス ダイアログ ボックスを開くOpening a Modeless Dialog Box

呼び出すことによって、モードレス ダイアログ ボックスが開かれ、Showメソッドです。A modeless dialog box is opened by calling the Show method.

<!--Main Window-->
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {

Imports System
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample

Public Class MainWindow
    Inherits Window
void editFindMenuItem_Click(object sender, RoutedEventArgs e)
{
    // Instantiate the dialog box
    FindDialogBox dlg = new FindDialogBox(this.documentTextBox);

    // Configure the dialog box
    dlg.Owner = this;
    dlg.TextFound += new TextFoundEventHandler(dlg_TextFound);

    // Open the dialog box modally
    dlg.Show();
}
Private Sub editFindMenuItem_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    Dim dlg As New FindDialogBox(Me.documentTextBox)
    dlg.Owner = Me
    AddHandler dlg.TextFound, New TextFoundEventHandler(AddressOf Me.dlg_TextFound)
    dlg.Show()
End Sub
    }
}
End Class

End Namespace

異なりShowDialogShowが直ちに返されます。Unlike ShowDialog, Show returns immediately. その結果、呼び出し元のウィンドウは、モードレス ダイアログ ボックスが閉じられたことを知ることができず、したがって、ダイアログ ボックスの結果を確認するタイミングを判断したり、ダイアログ ボックスからデータを取得して、さらに処理したりすることができません。Consequently, the calling window cannot tell when the modeless dialog box is closed and, therefore, does not know when to check for a dialog box result or get data from the dialog box for further processing. 代わりに、ダイアログ ボックスは、別の方法を作成して、呼び出し元のウィンドウに処理用のデータを返す必要があります。Instead, the dialog box needs to create an alternative way to return data to the calling window for processing.

モードレス ダイアログ ボックスから返されたデータの処理Processing Data Returned from a Modeless Dialog Box

この例では、 FindDialogBox 1 つまたは複数の検索、テキストが検索されている特定の頻度に応じて、メイン ウィンドウに結果を返すことがあります。In this example, the FindDialogBox may return one or more find results to the main window, depending on the text being searched for without any specific frequency. モーダル ダイアログ ボックスと同様、モードレス ダイアログ ボックスは、プロパティを使用して結果を返すことができます。As with a modal dialog box, a modeless dialog box can return results using properties. ただし、ダイアログ ボックスを所有しているウィンドウは、それらのプロパティを確認するタイミングを知る必要があります。However, the window that owns the dialog box needs to know when to check those properties. これを可能にする方法の 1 つは、ダイアログ ボックスで、テキストが見つかったときに発生するイベントを実装することです。One way to enable this is for the dialog box to implement an event that is raised whenever text is found. FindDialogBox 実装する、TextFoundEventときに最初この目的のためには、デリゲートが必要です。FindDialogBox implements the TextFoundEvent for this purpose, which first requires a delegate.

using System;
namespace SDKSample
{
    public delegate void TextFoundEventHandler(object sender, EventArgs e);
}
Namespace SDKSample
Public Delegate Sub TextFoundEventHandler(ByVal sender As Object, ByVal e As EventArgs)
End Namespace

使用して、TextFoundEventHandlerデリゲートFindDialogBoxを実装する、TextFoundEventです。Using the TextFoundEventHandler delegate, FindDialogBox implements the TextFoundEvent.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Text.RegularExpressions;

namespace SDKSample
{
    public partial class FindDialogBox : Window
    {
        public event TextFoundEventHandler TextFound;
        protected virtual void OnTextFound()
        {
            TextFoundEventHandler textFound = this.TextFound;
            if (textFound != null) textFound(this, EventArgs.Empty);
        }
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Text.RegularExpressions

Namespace SDKSample

Public Class FindDialogBox
    Inherits Window
    Public Event TextFound As TextFoundEventHandler
    Protected Overridable Sub OnTextFound()
        RaiseEvent TextFound(Me, EventArgs.Empty)
    End Sub
    }
}
End Class

End Namespace

その結果、Find検索結果が見つかった場合は、イベントを発生させることができます。Consequently, Find can raise the event when a search result is found.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Text.RegularExpressions;

namespace SDKSample
{
    public partial class FindDialogBox : Window
    {
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Text.RegularExpressions

Namespace SDKSample

Public Class FindDialogBox
    Inherits Window
void findNextButton_Click(object sender, RoutedEventArgs e)
{
Private Sub findNextButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
// Text found
this.index = match.Index;
this.length = match.Length;
OnTextFound();
Me.Index = match.Index
Me.Length = match.Length
RaiseEvent TextFound(Me, EventArgs.Empty)
}
End Sub
    }
}
End Class

End Namespace

そのとき、所有者ウィンドウは、このイベントを登録し、処理する必要があります。The owner window then needs to register with and handle this event.

using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;

namespace SDKSample
{
    public partial class MainWindow : Window
    {

Imports System
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Controls
Imports Microsoft.Win32

Namespace SDKSample

Public Class MainWindow
    Inherits Window
        void dlg_TextFound(object sender, EventArgs e)
        {
            // Get the find dialog box that raised the event
            FindDialogBox dlg = (FindDialogBox)sender;

            // Get find results and select found text
            this.documentTextBox.Select(dlg.Index, dlg.Length);
            this.documentTextBox.Focus();
        }
    }
}
    Private Sub dlg_TextFound(ByVal sender As Object, ByVal e As EventArgs)
        Dim dlg As FindDialogBox = DirectCast(sender, FindDialogBox)
        Me.documentTextBox.Select(dlg.Index, dlg.Length)
        Me.documentTextBox.Focus()
    End Sub

End Class

End Namespace

モードレス ダイアログ ボックスを閉じるClosing a Modeless Dialog Box

DialogResultシステムを使用して、モードレス ダイアログ ボックスを閉じることができます、設定する必要はありません、たとえば、次のメカニズムを提供します。Because DialogResult does not need to be set, a modeless dialog can be closed using system provide mechanisms, including the following:

  • クリックすると、閉じるタイトル バーのボタンをクリックします。Clicking the Close button in the title bar.

  • Alt キーを押しながら F4 キーを押す。Pressing ALT+F4.

  • 選択する閉じるから、システムメニュー。Choosing Close from the System menu.

また、コードを呼び出すことができますCloseときに、閉じるボタンをクリックします。Alternatively, your code can call Close when the Close button is clicked.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Text.RegularExpressions;

namespace SDKSample
{
    public partial class FindDialogBox : Window
    {
Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Text.RegularExpressions

Namespace SDKSample

Public Class FindDialogBox
    Inherits Window
        void closeButton_Click(object sender, RoutedEventArgs e)
        {
            // Close dialog box
            this.Close();
        }
    }
}
    Private Sub closeButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        MyBase.Close()
    End Sub
End Class

End Namespace

関連項目See Also

ポップアップの概要Popup Overview
ダイアログ ボックスのサンプルDialog Box Sample
ColorPicker カスタム コントロールのサンプルColorPicker Custom Control Sample