我创建了一个用户控件并且效果很好,但是当我将这个控件的两个实例放到一个窗口时,只有最后一个窗口可以工作。我试图找到解决方案,我意识到,依赖属性是共享的,但我不知道如何让它工作。
这是我的依赖属性:
public double AnimatingVerticalOffset
{
get { return (double)GetValue(AnimatingVerticalOffsetProperty); }
set { SetValue(AnimatingVerticalOffsetProperty, value); }
}
public static readonly DependencyProperty AnimatingVerticalOffsetProperty;
static ListChooser()
{
ListChooser.AnimatingVerticalOffsetProperty =
DependencyProperty.Register("AnimatingVerticalOffset", typeof(double), typeof(ListChooser), new UIPropertyMetadata(OnAnimationVerticalOffsetChanged));
}
答案 0 :(得分:2)
依赖项属性本身必须是静态的,与单个实例无关。这也适用于它的回调(在你的情况下是OnAnimationVerticalOffsetChanged) - 这些必须是静态方法(不用担心,对象实例是通过它的参数传递的,你只需要进行一些类型转换以确保对象是你的类型正在与...合作。
您应该使用静态初始化程序初始化DP,您使用的方法(在构造函数中初始化)有效,但DP将覆盖每个实例。
See this question for deeper explanation.
编辑:
更正后的代码:
public double AnimatingVerticalOffset
{
get { return (double)GetValue(AnimatingVerticalOffsetProperty); }
set { SetValue(AnimatingVerticalOffsetProperty, value); }
}
public static readonly DependencyProperty AnimatingVerticalOffsetProperty =
DependencyProperty.Register("AnimatingVerticalOffset", typeof(double), typeof(ListChooser), new UIPropertyMetadata(OnAnimationVerticalOffsetChanged));
static ListChooser()
{
}
如果回调不是静态的,您将收到编译错误(=>您必须将其设置为静态)。
编辑:
请记住, DP定义是静态的,而不是属性的值本身! DP的工作方式与任何其他属性完全一样,它只是具有一些额外的功能:价值不和,出价,动画......