2016-04-08 7 views
0

このウィンドウのxamlでは、Gridコンテナを削除してDockPanelを配置しました。 しかし、私はDockPanelからグリッドのアタッチされたプロパティにアクセスできます。これはどのように可能ですか?グリッドのプロパティは常に利用可能ですか?

ありがとうございます!

<Window x:Class="testWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="testWindow" Height="300" Width="300"> 
    <DockPanel Grid.Column="2"> 

    </DockPanel> 
</Window> 

答えて

1

特性がインスタンスではなく、添付されているので - それらはGridクラスに静的に定義され、値は通常のプロパティシステムの外プロパティコンテナに格納されていることを意味しています。

あなたはGridDockPanelをお持ちの場合は、DockPanelが上であるべき列を設定するGrid.Columnを使用しています。したがって、それらは非常に便利です。添付された依存関係プロパティは、親ツリーから継承することもできます。詳細については

、このリンクをお読みください。

http://www.abhisheksur.com/2011/07/internals-of-dependency-property-in-wpf.html

我々はGrid.Column例を取る場合は、内部のどこかGridクラスでは、このような定義があるとしている:

public static readonly DependencyProperty ColumnProperty = 
    DependencyProperty.RegisterAttached(
     "Column", 
     typeof(int), 
     typeof(Grid), 
     new PropertyMetadata(0)); 

上記のコードは、実際には、添付された依存関係プロパティを宣言するために必要なすべてです。ここにゲッターやセッターはなく、プロパティは静的であることに注意してください。それはすべて、行動の宣言であり、それを保存または検索するロジックはありません。

これは、WPFに依存プロパティ(DP)用の独自の内部ストアがあるためです。通常のDPでは、クラスにバッキングフィールドもありません。つまり、すべてのDPはWPFによって内部的に格納されます。ただし、WPFはどの値がどのインスタンスに属しているかを引き続き把握していますので、TextBox1にはWidth = 20を保存することはできます。また、添付されたDPの場合のように、クラス自体に定義されていない値を格納することも可能です。

Grid.Columnのコントロールが設定できるルールはないため、Gridコントロールの子ではないコントロールにも格納できます。

+0

フォローアップありがとう。私は子供のコントロールがコンテナの添付プロパティにアクセスできることを理解しています。しかし、この場合、ドックパネルはグリッド上ではなくウィンドウ上に直接存在することに注意してください。しかし、私はGrid.Column添付プロパティにアクセスすることができます。 – soumyasg

+0

@soumyasg:私は私の答えで詳述しようとしました。十分に明確でない場合は教えてください。 –

+0

あなたの精巧な答えに感謝します。これを完全に理解するためには、依存関係/添付プロパティを再訪する必要があります。それはまだ私には少しぼやけているようです。 – soumyasg

関連する問題