スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: スポンサー広告

WindowにModal起動かどうかを持たせて見る。

Windows.FormsではあったModalプロパティが、WPFにはない。
なので、色々調べてみた。
Where is Modal Property?
おお、これでいけるか?と思ったんだけど、Show()でもShowDialog()でも結果は変わらなかった。
何がダメなんだろ?と色々試してみたけど、結局他の手を打つことにした。
要は、添付プロパティで実装する事にした。

using System.Windows;

namespace TawamureDays {

/// <summary>
/// ウィンドウ(Window)用ビヘイビアクラス
/// </summary>
public static class WindowBehavior {

/// <summary>
/// Modal起動かどうかを取得します。
/// </summary>
/// <param name="obj">設定対象オブジェクト(Window)</param>
/// <returns>true:Modal起動, false:モードレス起動, null:不明(デフォルト)</returns>
public static bool? GetIsModal(DependencyObject obj) {
return (bool?)obj.GetValue(IsModalProperty);
}

/// <summary>
/// Modal起動かどうかを設定します。
/// </summary>
/// <param name="obj">設定対象オブジェクト(Window)</param>
/// <param name="value">true:Modal起動, false:モードレス起動</param>
public static void SetIsModal(DependencyObject obj, bool? value) {
obj.SetValue(IsModalProperty, value);
}

/// <summary>Modal起動かどうか</summary>
public static readonly DependencyProperty IsModalProperty =
DependencyProperty.RegisterAttached("IsModal", typeof(bool?),
typeof(WindowBehavior), new UIPropertyMetadata(null));
}
}

使い方は、自分で設定する。それだけ。

//モーダル起動
var window = new Window();
WindowBehavior.SetIsModal(window, true);
window.ShowDialog();


//モードレス起動
var window = new Window();
WindowBehavior.SetIsModal(window, false);
window.Show();

これは、終了時に、DialogResultプロパティを使えるかどうかの判定に使う。
※Show()メソッドで起動した時、DialogResultを設定して終了させようとするとエラーになるから。

var window = sender as Window;
var isModal = window.GetIsModal(window).GetValueOrDefault();

if (isModal) {
window.DialogResult = true;//trueはOK, falseはキャンセルを意味する。
}
window.Close();

いちいち設定するが面倒であれば、共通化する手段を探すしかないかな。
というか、標準でサポートしてくれよ…。
スポンサーサイト
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0


この記事へのコメント

コメントの投稿

非公開コメント


サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。