コードの作成
作成した2つのウィンドウは、メインページのボタンとテキストをクリックすると、呼び出して表示するようにします。この呼び出しの時に、作成した2つのユーザーコントロールをそれぞれC1Windowコントロールに組み込み、ダイアログボックスとして表示します。
また、ツールボックスでは、CheckBoxコントロールのチェックのオンオフで、メインページのプロパティを操作する処理を組み込みます。
モーダルウィンドウの呼び出し処理
C1Windowコントロールはコードから作成し、このContentプロパティにモーダルウィンドウの「about」オブジェクトを作成して設定します。
このウィンドウは、ウィンドウを閉じないとメインページが操作できない「モーダル」ウィンドウとして表示させます。
各コードの内の番号は、次の処理を行っています。
- TextBlockのイベントハンドラで、C1Windowクラスのコンストラクタを実行して変数に格納
- このクラスのHeaderプロパティでタイトルバーの文字列を設定
- ウィンドウのサイズを指定(タイトルバーが付くので、作成したユーザーコントロールよりも少し大きめに設定)
- ユーザーコントロールのコンストラクタを実行して、オブジェクトをContentプロパティに設定
- ダイアログをアプリケーションの中心に置きたい場合は、CenterOnScreenメソッドを実行
- モーダル表示時のメインウィンドウは、デフォルトでは薄いグレー表示。ModalBackgroundプロパティを使うとこの色を変えることが可能(プロパティの値はBrushオブジェクト)
- アバウトダイアログは最小化・最大化する必要がないため、これらのボタンを非表示
- C1Windowコントロールのプロパティ設定後、ShowModalメソッドを実行してモーダル表示
Imports C1.WPF 'アバウトダイアログページをC1Windowに組み込んで使う Private Sub TextBlock1_MouseLeftButtonDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) (1) Dim wnd As New C1Window() (2) wnd.Header = "このアプリケーションについて" (3) wnd.Height = 250 wnd.Width = 400 (4) wnd.Content = New about() (5) wnd.CenterOnScreen() (6) wnd.ModalBackground = New SolidColorBrush(Colors.Azure) (7) wnd.ShowMinimizeButton = False wnd.ShowMaximizeButton = False (8) wnd.ShowModal() End Sub
using C1.WPF; // アバウトダイアログページをC1Windowに組み込んで使う private void TextBlock1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { (1) C1Window wnd = new C1Window(); (2) wnd.Header = "このアプリケーションについて"; (3) wnd.Height = 250; wnd.Width = 400; (4) wnd.Content = new about(); (5) wnd.CenterOnScreen(); (6) wnd.ModalBackground = new SolidColorBrush(Colors.Azure); (7) wnd.ShowMinimizeButton = false; wnd.ShowMaximizeButton = false; (8) wnd.ShowModal(); }
ツールボックスの呼び出し処理
ツールボックスも、アバウトダイアログと同様にコードからC1Windowコントロールを作成します。ただし、ツールボックスはアバウトダイアログと違い、ダイアログを表示しながらアプリケーションを操作できる「モードレス表示」にします。
各コードの内の番号は、次の処理を行っています。
- C1Windowクラスのコンストラクタを実行して変数に格納
- Headerプロパティでタイトルバーの文字列を設定
- ウィンドウのサイズを指定
- ユーザーコントロールのコンストラクタを実行し、オブジェクトをContentプロパティに設定
- ツールボックスの場合は、アプリケーションの中心ではなく左端に配置したいので、Top/Leftプロパティを使って表示位置を指定
- ツールボックスの最小化・最大化の必要はないので、これらのボタンを非表示
- ツールボックスの場合はモードレス表示にするため、Showメソッドを実行
'ツールボックスページをC1Windowに組み込んで使う Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) (1) Dim wnd As New C1Window() (2) wnd.Header = "設定" (3) wnd.Height = 120 wnd.Width = 200 (4) wnd.Content = New Toolbox() (5) wnd.Left = 10 wnd.Top = 40 (6) wnd.ShowMinimizeButton = False wnd.ShowMaximizeButton = False (7) wnd.Show() End Sub
private void Button1_Click(object sender, RoutedEventArgs e) { (1) C1Window wnd = new C1Window(); (2) wnd.Header = "設定"; (3) wnd.Height = 120; wnd.Width = 200; (4) wnd.Content = new toolbox(); (5) wnd.Left = 10; wnd.Top = 40; (6) wnd.ShowMinimizeButton = false; wnd.ShowMaximizeButton = false; (7) wnd.Show(); }