2016-04-08 11 views
2

で添付プロパティをバインディング:は、プログラムで、私はWPFに「透かし」のテキストボックスの<a href="http://www.ageektrapped.com/blog/the-missing-net-4-cue-banner-in-wpf-i-mean-watermark-in-wpf/" rel="nofollow noreferrer">Jason Kemp's cool <code>CueBanner</code> class</a>を使用していWPF

<TextBox 
    hpext:CueBanner.Content="Find Text" 
    hpext:CueBanner.Padding="2,6,0,0" 
    /> 

Don't tell Ayn Rand

ジェイソンのコードは、プログラムContentPresenterを作成し、CueBanner.Contentにその内容を設定ContentPresenterAdornerサブクラスに追加し、必要に応じて表示します。

コードでは、飾り付けされたコントロールの余白と余白からのContentPresenterを推測しますが、代わりにhpext:CueBanner.Paddingを追加して、明示的に好きな値に設定することができました。

contentPresenter.Margin = CueBanner.GetPadding(adornedElement); 

これまでのところとても良いです。

これは問題です:それは動作しますが、代わりにバインドしたいと思います。

var binding = new Binding("hpext:CueBanner.Padding") { Source = adornedElement }; 

BindingOperations.SetBinding(contentPresenter, ContentPresenter.MarginProperty, binding); 

しかし、私はソースプロパティのパスのために何を使うのですか?"hpext:CueBanner.Padding"は機能せず、動作しません。その名前空間はそこに存在しません。喜びは"CueBanner.Padding""(CueBanner.Padding)"です。 "MyProject.Extensions.CueBanner.Padding"はどちらもうまく動作せず、私はなぜそれをすべきか分かりません。

PropertyPathには役立つようなものは何も表示されませんが、読んだときには少し空白になり始めます。

XAMLでこれを行うだけでいいですか?

+1

新しいバインディング{Path = new PropertyPath(CueBanner.PaddingProperty)、...} 'はどうですか? – Clemens

+0

@クレメンスビンゴ!私はそれを受け入れることができるように答えとして投稿することができますか? –

答えて

3

あなたが直接作成することもPropertyPathは次のように接続されたプロパティからです:

var binding = new Binding 
{ 
    Path = new PropertyPath(CueBanner.PaddingProperty), // here 
    Source = adornedElement 
}; 
+0

ありがとうございました。 –

1

私は、バインディングのソースがadornedElementではなく、TextBoxでなければならないと考えています。 (コード経由でGrid.Rowにバインドする方法を示しています)thisに基づいて、結合は次のように作成する必要があります。

var binding = new Binding("(CueBanner.Padding)") { Source = textbox }; 

BindingOperations.SetBinding(textBox, MyProject.Extensions.CueBanner.PaddingProperty, binding); 

(登録あなたAttachedProperty実際にMyProject.Extensions.CueBanner.PaddingPropertyを交換してください)

+0

こんにちはAndy - 'adornedElement'はテキストボックスです。 'CueBanner.GetPadding(adornedElement)'は、XAMLの添付プロパティに渡したいパディング値を返します。 –

関連する問題