Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF:usercontrol共享依赖属性的实例_Wpf_Dependency Properties - Fatal编程技术网

WPF:usercontrol共享依赖属性的实例

WPF:usercontrol共享依赖属性的实例,wpf,dependency-properties,Wpf,Dependency Properties,我制作了一个usercontrol,它工作得很好,但是当我把这个控件的两个实例放在一个窗口中时,只有最后一个可以工作。我试图找到解决方案,我意识到依赖属性是共享的,但我不知道如何让它工作 以下是我的依赖项属性: public double AnimatingVerticalOffset { get { return (double)GetValue(AnimatingVerticalOffsetProperty); } set { SetValue

我制作了一个usercontrol,它工作得很好,但是当我把这个控件的两个实例放在一个窗口中时,只有最后一个可以工作。我试图找到解决方案,我意识到依赖属性是共享的,但我不知道如何让它工作

以下是我的依赖项属性:

    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));
    }

依赖项属性本身必须是静态的,与单个实例没有关联。这也适用于它的回调(在您的例子中是OnAnimationVerticalOffsetChanged)——这些必须是静态方法(不要担心,对象实例是通过其参数传递的,您只需执行一些类型转换,以确保对象是您正在使用的类型)

您应该使用静态初始值设定项来初始化DP,您使用的方法(在构造函数中初始化)可以工作,但是DP将覆盖每个实例

编辑:

更正代码:

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定义是静态的,而不是属性的值本身!DPs的工作原理与任何其他财产完全相同,它只是有一些额外的功能:价值继承、出价、动画……

我想我理解这一点,但一定有办法做到这一点。textbox上的FontSize属性如何。怎么做的?我需要设置此属性的动画,因此我在dependency properties中搜索。FontSize的定义与我发布的一样。我用解释编辑了这篇文章。别担心,试试我贴的。它可以工作:)OP正在静态构造函数中初始化-这应该不会有任何问题。静态构造函数不是每个实例都调用的。@用户:您能解释一下为什么依赖项属性是“共享”的吗?您发布的代码看起来正确,没有更多的示例,我不确定您看到了什么问题。您好,我的问题是:当我用这个组件的更多实例启动window时,只有最后创建的实例更改依赖项属性。其余部分可以看到由上一个实例设置的值,但无法设置此属性。没有例外或者别的什么,它只是不起作用。对不起,妈妈。问题在另一个地方,我已经解决了,但真的很奇怪。