2011-07-15 11 views
0

私はRulerを実装する必要があり、Controlから派生し、いくつかのDependencyProperties(最小値、最大値、LowerValue、UpperValueなど)を持つCustomControl RangeSliderを持っています。Silverlight/WPF:DependencyProperty.AddOwner&Render on change

Xamlでは、RulerにはScale(Canvasから派生した)があり、Scalingを描画するのに同じプロパティが必要です。 LowerValueまたはUpperValueが変更された場合、スケールは再描画されます。だから私は追加する

public static readonly DependencyProperty LowerValueProperty = 
    RangeSlider.LowerValueProperty.AddOwner(typeof(Scale), new FrameworkPropertyMetadata(1d)); 

私は親指を動かすと、何かがスケールで発生する必要があります。まず、OnRender(DrawingContext)を実装し、RangeSlider FrameworkPropertyMetadataOptionsのLowerValuePropertyに追加しました。しかしそれは問題ではない、何も起こらない。さらに、Silverlightでは使用できないため、OnRender(DrawingContext)を使用したくありません。

さらに、RangeSliderのOnLowerValueChanged-Methodがなぜ発生しますが、LowerValueのセッターではないのでしょうか(少なくともデバッガーはそこでブレークしません)。

Silverlight & WPFは、RangeSliderのLowerValueが変更されたとき(OnLowerValueChangedからの昇格を除く)、スケールで自動的にメソッドを発生させる方法はありますか?

注:上記のコードはWPFコードです。 Silverlightでは、もちろんいくつかの違いがあります。なぜなら、Silverlightは他のものの中でも強要をサポートしていないからです。
コードはSilverlightとWPFで実行する必要があるため、私はOnRender(DrawingContext)を使用したくありません。

+0

再セッターない発射:依存関係プロパティへの結合は舞台裏のSetValue()を介してです。 Setter/Getterはあなたのためのヘルパーとして存在しています(Xamlパーサでも使用すると思います)。 –

答えて

0

私が正しく理解しているのは、GetValue & SetValueメソッドの周りのラッパーである、いくつかのロジックをプロパティーで実行できるようにすることです。問題は、XAMLを作成し、それらのプロパティのバインディングを指定する場合にのみ使用されることです。彼らの後ろにはもはや呼ばれることはありません、代わりにGetValue & SetValueが使用されます。私が考える理由

ザッツ(まだ私は質問を理解していないが、明らかに)あなたがコントロール内(例えば)ValueChangedイベントのイベントハンドラを使用するか持っており、GetValueメソッド&のSetValueへの呼び出しをインターセプトする他の方法はありません。

それとも、DPの後に呼び出されDependencyPropertiesとPropertyChangedCallbackが変更されている使用して、そこに自分のコードを配置することができます

+0

OK、なぜ私はsetterが上がらないのか理解しています。しかし、WPF Slider Controlがどのように機能するかは不思議です。 Reflectorでコードを調べました。 TickBarは、例えば、 MaximumProperty(AddOwner to RangeBase.MaximumProperty)であり、OnRenderメソッドもあります。私はそこにはもう見えません、どのようにTickBarの再描画トリガー。それで、どういうわけかそれは可能です。 – Em1

関連する問題