我们有一个自定义面板类,它通过内部 DoubleAnimation 对象为其子级设置动画。但是,我们希望将动画的 Duration 依赖属性公开为面板的公共属性,以便用户在使用我们的面板时可以在其 XAML 中更改它。但是我们不想暴露动画对象的任何其他部分,只是持续时间。
不断向我建议的第一件事是使用 PropertyChanged 通知,但这仅适用于 setter,而不适用于 getter。我们也不能简单地创建一个 .NET 属性,因为 XAML 完全绕过了 .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));