atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
プログラミング図書館・本館
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • プログラミング図書館・本館
  • WPF
  • 依存関係プロパティ

依存関係プロパティ

最終更新:2011年01月25日 03:44

atachi

- view
管理者のみ編集可
  • 依存関係プロパティの基本実装 [#xa682a33]
    • 依存関係プロパティの識別子を実装 [#i7e417dd]
    • FrameworkPropertyMetadataで指定するメタデータについて [#a3e9a582]
  • コレクションの依存関係プロパティ [#a4489562]
  • 参考サイト

コントロールを自作する場合に、コントロールが公開するプロパティは依存関係プロパティとして実装します。
依存関係プロパティとして実装すると、バインディングが使えるようになります。

  • リソース
  • データ バインディング
  • スタイル
  • Animations
  • メタデータのオーバーライド
  • プロパティ値の継承
  • WPF デザイナーの統合

依存関係プロパティの基本実装

依存関係プロパティは次のようにDependencyPropertyを使用して値を管理します。
値の取得や設定はすべてGetValueメソッド/SetValueメソッドで行われます。

コントロールを使う側は、公開されているプロパティである依存関係プロパティだけしか見えません。

class MyCustomControl : Control {
	// 依存関係プロパティの識別子
	public static readonly DependencyProperty IsSpinningProperty = 
		DependencyProperty.Register(
		"IsSpinning",                // name 引数
		typeof(Boolean),             // propertyType 引数
		typeof(MyCustomControl),     // ownerType 引数
		);
 
 
	// 依存関係プロパティ
	public bool IsSpinning {
		get { return (bool)GetValue(IsSpinningProperty); }
		set { SetValue(IsSpinningProperty, value); }
	}
}

依存関係プロパティの識別子を実装

DependencyProperty.Register()を使用して、 WPFが持つプロパティシステムにプロパティに関する情報を登録します。

引数名 設定内容例 説明
name "IsSpinning" プロパティシステムに登録するプロパティ名。
propertyType typeof(Boolean) プロパティの型情報。typeofを使って型情報を取り出す。
ownerType typeof(MyCustomControl) プロパティを定義したクラスの型情報。
typeMetadata new FrameworkPropertyMetadata(...) プロパティについての追加情報。
FrameworkPropertyMetadata を使って指定する。省略可能。
こちら
validateValueCallback new ValidateValueCallback(...) プロパティの値についてのバリデーション。
ValidateValueCallback を使って指定する。省略可能。

Registerの戻り値には依存関係プロパティに関する情報が含まれている。
依存関係プロパティに値を設定する場合や取得する場合はこのインスタンスをつかって行う。
このインスタンスは、public static readonlyで定義する必要がある。

FrameworkPropertyMetadataで指定するメタデータについて

FrameworkPropertyMetadata を使用すると、プロパティに関する設定が行える。

  • プロパティの初期値
  • プロパティ変更時に呼び出されるコールバックメソッド
  • WPFデザイナによるデザイン時の挙動
  • デフォルトのデータバインディングのモード
  • VisualObjectツリーで親から子へのプロパティ継承

WPFデザイナに関係するプロパティがいくつかあります。
適切に設定することで、WPFデザイナ使用時のパフォーマンスがよくなります。

  • AffectsMeasure
    プロパティ値の変更時に、サイズ変更を伴うコントロールの再描画が必要。
  • AffectsArrange
    プロパティ値の変更時に、サイズ変更を伴わない(自分より下階層のサイズ変更は許可)コントロールの再描画が必要。
  • AffectsRender
    プロパティ値の変更時に、一切のサイズ変更が伴われないコントロールの再描画が必要。

コレクションの依存関係プロパティ

  • カスタムコントロールのコンストラクタでSetValueを使ってsingletonなコレクション型インスタンスを作成する
  • 依存関係プロパティ識別子は読み取り専用で登録する(DependencyProperty.RegisterReadOnly を使用する)
class MyCustomControl : Control {
	public MyCustomControl() : base() {
		SetValue(ItemsPropertyKey, new List<FrameworkElement>() );
	}
 
	private static readonly DependencyPropertyKey ItemsPropertyKey = 
		DependencyProperty.RegisterReadOnly(
			"Items",
			typeof(List<FrameworkElement>),
			typeof(MyCustomControl),
			new FrameworkPropertyMetadata(new List<FrameworkElement>())
		);
 
	// 依存関係プロパティの識別子
	public static readonly DependencyProperty IsSpinningProperty = 
		DependencyProperty.Register(
		"IsSpinning",                // name 引数
		typeof(Boolean),             // propertyType 引数
		typeof(MyCustomControl),     // ownerType 引数
		);
 
	public static readonly DependencyProperty ItemsProperty = ItemsPropertyKey.DependencyProperty;
 
 
	// 依存関係プロパティ
	public bool IsSpinning {
		get { return (bool)GetValue(IsSpinningProperty); }
		set { SetValue(IsSpinningProperty, value); }
	}
 
	public List<FrameworkElement> Items {
		get {
			return (List<FrameworkElement>)GetValue(ItemsProperty);
		}
	}
}

参考サイト

  • MSDN カスタム依存関係プロパティ
「依存関係プロパティ」をウィキ内検索
LINE
シェア
Tweet

[Amazon商品]


プログラミング図書館・本館
記事メニュー

C#

  • 新機能
  • 言語文法
    • 型
    • 関数
    • クラス
    • 演算子
    • 構文
    • デリゲート
    • イベント
    • 例外処理
    • アトリビュート
    • 名前空間
    • ジェネリクス
  • リフレクション
  • LINQ

.NET Frameworks

  • 数値
  • 文字列
  • 日付時刻
  • オブジェクト
  • コレクション
  • ファイルシステム
  • スレッド
  • データテーブル
  • グラフィックス
  • デバッグ
    • ログ出力
    • ユニットテスト
  • ユーティリティ
  • ネットワーク
    • HTTP
  • デバイス
    • COMポート
  • EntityFrameworks
    • Code First Programming Model
  • デバイスドライバ
    • WinUSB

WPF

  • XAML
  • イベント
  • コマンド
  • スタイル
  • データバインディング
  • コンポーネント
  • グラフィックス
  • カスタムコンポーネント
    • 依存関係プロパティ

アプリケーション

  • 二重起動の防止
  • アンマネージドDLLの読み込み
  • 外部のアプリケーションを起動

VisualStudio

  • 拡張機能
  • カラー設定

ライブラリ

  • WPFToolkit
  • A Fast CSV Reader
  • AvalonDock

実装方法

  • ドラッグアンドドロップ
  • アプリケーション内のドラッグアンドドロップ
  • CSVからDataTable

minecraft

  • Bukkit
  • プラグイン
    • Permissions
    • SlowHealth
    • CookieMonster
    • iConomy
    • WorldGuard
    • Lockette
    • MyHome
    • BorderGuard

サイトについて

プロフィール/リンク/未分類

メモ/ゲーム/Stacks/Omoikane


更新履歴

取得中です。

ここを編集

記事メニュー2

読んでいる本


Effective C#

QLOOKアクセス解析

ここを編集

人気記事ランキング
  1. .NET/WinUSB
  2. アンマネージドDLLの読み込み
もっと見る
最近更新されたページ
  • 5038日前

    Bukkit
  • 5044日前

    トップページ
  • 5065日前

    メニュー
  • 5075日前

    WPF/グラフィックス
  • 5075日前

    .NET/グラフィックス
  • 5075日前

    .NET/グラフィックス/画像の書き込み
  • 5075日前

    .NET/グラフィックス/画像の読み込み
  • 5081日前

    .NET/コレクション
  • 5099日前

    .NET/WinUSB
  • 5134日前

    BorderGuardプラグイン
もっと見る
人気記事ランキング
  1. .NET/WinUSB
  2. アンマネージドDLLの読み込み
もっと見る
最近更新されたページ
  • 5038日前

    Bukkit
  • 5044日前

    トップページ
  • 5065日前

    メニュー
  • 5075日前

    WPF/グラフィックス
  • 5075日前

    .NET/グラフィックス
  • 5075日前

    .NET/グラフィックス/画像の書き込み
  • 5075日前

    .NET/グラフィックス/画像の読み込み
  • 5081日前

    .NET/コレクション
  • 5099日前

    .NET/WinUSB
  • 5134日前

    BorderGuardプラグイン
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  2. MadTown GTA (Beta) まとめウィキ
  3. R.E.P.O. 日本語解説Wiki
  4. シュガードール情報まとめウィキ
  5. ソードランページ @ 非公式wiki
  6. ヒカマーWiki
  7. AviUtl2のWiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. Dark War Survival攻略
  10. 星飼いの詩@ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 検索してはいけない言葉 @ ウィキ
  5. 初音ミク Wiki
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 発車メロディーwiki
  9. オレカバトル アプリ版 @ ウィキ
  10. 英傑大戦wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. べりはぴ - ストグラ まとめ @ウィキ
  3. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  4. クロスボーン・ガンダムX1改 - 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  5. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
  6. ヴォイドカンパニー - アニヲタWiki(仮)
  7. 機体一覧 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  8. ガンダム・エアリアル(改修型) - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. コメント/雑談・質問 - マージマンション@wiki
  10. 危険度7 - 検索してはいけない言葉 @ ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.