これらの答えの多くは単純化されており、誰かがWPFを始めたとしても、「使用する.ShowDialog()
!」ただし、これは、.Show()
基になるウィンドウの使用をブロックし、モーダルウィンドウが閉じられるまでコードが続行されないようにするために使用するメソッド(ではない)です。
まず、2つのWPFウィンドウが必要です。(一方が他方を呼び出します。)
最初のウィンドウから、MainWindow.xamlと呼ばれていたとしましょう。そのコードビハインドでは、次のようになります。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
次に、ボタンをXAMLに追加します。
<Button Name="btnOpenModal" Click="btnOpenModal_Click" Content="Open Modal" />
Click
ルーチンを右クリックして、[定義に移動]を選択します。MainWindow.xaml.csに作成されます。
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
}
その関数内で、ページクラスを使用して他のページを指定する必要があります。他のページに「ModalWindow」という名前を付けたとします。これにより、そのページクラスがインスタンス化(呼び出し)されます。
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
}
モーダルダイアログで設定する必要がある値があるとします。ModalWindow
XAML でテキストボックスとボタンを作成します。
<StackPanel Orientation="Horizontal">
<TextBox Name="txtSomeBox" />
<Button Name="btnSaveData" Click="btnSaveData_Click" Content="Save" />
</StackPanel>
次に、イベントハンドラー(別のClick
イベント)を再度作成し、それを使用してテキストボックスの値をpublic static変数に保存し、ModalWindow
を呼び出しますthis.Close()
。
public partial class ModalWindow : Window
{
public static string myValue = String.Empty;
public ModalWindow()
{
InitializeComponent();
}
private void btnSaveData_Click(object sender, RoutedEventArgs e)
{
myValue = txtSomeBox.Text;
this.Close();
}
}
次に、.ShowDialog()
ステートメントの後で、その値を取得して使用できます。
private void btnOpenModal_Click(object sender, RoutedEventArgs e)
{
ModalWindow modalWindow = new ModalWindow();
modalWindow.ShowDialog();
string valueFromModalTextBox = ModalWindow.myValue;
}