3

内部の DoubleAnimation オブジェクトを介して子をアニメーション化するカスタム パネル クラスがあります。ただし、アニメーションの Duration 依存関係プロパティをパネルのパブリック プロパティとして公開して、ユーザーがパネルを使用するときに XAML で変更できるようにします。しかし、アニメーション オブジェクトの他の部分は公開したくありません。持続時間だけです。

私に提案され続けている最初のことは、PropertyChanged 通知を使用することですが、それはゲッターではなくセッターに対してのみ機能します。また、XAML は .NET プロパティを完全にバイパスするため、単純に .NET プロパティを作成することもできません。

私の同僚は賢い考えを持っていました... 外部プロパティと内部オブジェクトのプロパティの間で双方向のデータ バインディングを使用します。ただし、データバインディングは別として、これを行うための別の/より良い方法はありますか...それを含むオブジェクトのパブリックインターフェイスを介して内部オブジェクトの依存関係プロパティを公開しますか?

更新しました:

双方向の DataBinding が最適だったようです。(@Jeffに感謝します!)そのために、外側のDPをセットアップする最良の方法であることがわかったので、メタデータ、デフォルト、およびすべてが内側のオブジェクトのDPに完全に一致します。次に、Jeff のバインディング トリックを使用すれば完了です。

public Duration Duration {
    get { return (Duration)GetValue(DurationProperty); }
    set { SetValue(DurationProperty, value); }
}

public static readonly DependencyProperty DurationProperty = DoubleAnimation.DurationProperty.AddOwner(
    typeof(SlideContentPanel));
4

2 に答える 2

5

これを試してください...外部オブジェクトに同等の依存関係プロパティを作成してから、内部オブジェクトから外部オブジェクトにバインドします。これは両方向で機能します。

Binding durationBinding = new Binding(){
    Source = _doubleAnimation,
    Path   = new PropertyPath("Duration"),
    Mode   = BindingMode.TwoWay
};
BindingOperations.SetBinding(this, SlideContentPanel.DurationProperty, durationBinding);

xaml愛好家のために

<UserControl x:Class=”Controls.DataGrid.DataGrid2"
Name="rootControl">

<Grid>       
    <xcdg:DataGridControl Grid.Row="0"
       Name="internalDataGrid" 
       SelectedItem="{Binding ElementName=rootControl, Path=SelectedItem}"
       EditTriggers="{Binding ElementName=rootControl, Path=EditTriggers}"
 />
于 2010-10-08T21:32:04.117 に答える
0

あなたの「問題」について私は何かが奇妙に思えます。

依存関係プロパティは、コードで読み取りと設定の両方を行うことができます。この内部ストレージの代わりにそれを使用してみませんか?

パフォーマンス上の理由で内部ストレージ値を使用する場合は、既に機能すると述べたプロパティ変更通知を使用します。プロパティが変更されたら、内部値を更新します。プロパティを内部的に変更する場合は、適切な間隔で依存関係プロパティ セッターを呼び出して、他のすべての人を更新します (そこから受け取るプロパティ変更イベントを無視します)。

状況によっては、これ以外のものが必要になる場合もありますが、2 番目のオプションは、このようなものと同じくらい複雑にする必要があります。

于 2010-10-08T20:35:57.160 に答える