私人WPF依赖项属性
在我的WPF项目中,我需要为具有相同值的几个属性设置动画。所以我的想法是创建一个自定义的,私有的依赖属性,动画将被应用。不幸的是,这似乎并不奏效。 DependencyPropertyDescriptor.FromProperty()
总是会为此属性返回null
。这里是代码:私人WPF依赖项属性
public partial class PedestrianVisual : UserControl {
private static readonly DependencyProperty CurrentInaccuracyRadiusProperty =
DependencyProperty.Register("CurrentInaccuracyRadius", typeof(double), typeof(PedestrianVisual));
private double CurrentInaccuracyRadius {
get { return (double)GetValue(CurrentInaccuracyRadiusProperty); }
set { SetValue(CurrentInaccuracyRadiusProperty, value); }
}
public PedestrianVisual() {
InitializeComponent();
// This returns "null" all the time.
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(
CurrentInaccuracyRadiusProperty, typeof(PedestrianVisual));
dpd.AddValueChanged(this, (s, e) => {
UpdateInaccuracyCircle((double)GetValue(CurrentInaccuracyRadiusProperty));
});
}
private void UpdateInaccuracyCircle(double curRadius) {
// do something here
}
}
是否有任何其他方式来创建一个私人的依赖属性?
我不明白你为什么这么做,我在声明中附加回调时没有遇到任何问题,例如,是这样的:
private static readonly DependencyProperty CurrentInaccuracyRadiusProperty =
DependencyProperty.Register
(
"CurrentInaccuracyRadius",
typeof(double),
typeof(PedestrianVisual),
new UIPropertyMetadata(0.0, (s, e) =>
{
((PedestrianVisual)s).UpdateInaccuracyCircle((double)e.NewValue);
})
);
这是因为'UpdateInaccuracyCircle'是一个实例方法,而依赖属性是'static'。您的解决方案不起作用。 – 2011-06-14 08:46:09
我刚刚修复它,而你写了评论。您可以轻松转换该方法。或者,您可以投送发件人并调用其上的方法。 – 2011-06-14 08:46:47
@ Sebastian Krysmanski:两种方法都适用于我。 – 2011-06-14 08:51:58
进一步更新HB的:
private static readonly DependencyProperty CurrentInaccuracyRadiusProperty =
DependencyProperty.Register
(
"CurrentInaccuracyRadius",
typeof(double),
typeof(PedestrianVisual),
new UIPropertyMetadata(0.0, (s, e) =>
{
UpdateInaccuracyCircle((PedestrianVisual)s, (double)e.NewValue);
})
);
如果你想坚持的实例方法(UpdateInaccuracyCircle
方法应该是在这种情况下静态)
答案是,标准方法是沿着这些方向:
static readonly DependencyProperty CurrentInaccuracyRadiusProperty =
DependencyProperty.Register
(
"CurrentInaccuracyRadius",
typeof(double),
typeof(PedestrianVisual),
new UIPropertyMetadata(0.0, OnCurrentInaccuracyRadiusChanged)
);
static void OnCurrentInaccuracyRadiusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var pedVisual = d as PedestrianVisual;
if (pedVisual != null)
pedVisual.OnCurrentInaccuracyRadiusChanged((double)e.OldValue, (double)e.NewValue);
}
void OnCurrentInaccuracyRadiusChanged(double oldValue, double newValue)
{
UpdateInaccuracyCircle(newValue);
}
当您将'CurrentInaccuracyRadiusProperty'公开时,它会工作吗? – Heinzi 2011-06-14 08:31:11
仅仅因为DependencyPropertyDescriptor依赖d-prop公开并不意味着d-prop本身不起作用。如果你想要做的就是检测值的变化,只需在你的d-prop的元数据中指定一个处理程序。 – 2011-06-14 09:28:34