2 hanlixuan hanlixuan 于 2014.09.18 17:21 提问

wpf 中 timeline和附加属性奇怪的死循环

具体是这样的,我想建一个自定义list然后里面放timeline,在自定义的list中,我增加了两个附加属性,一个是 previous一个是next,用来给timeline项增加前一个后一个双向链接附加属性,
但增加的时候,会进行死循环,不知道为什么,如果给这个集合增加别的dependencyObj对象就一点问题也没有,如果增加timeline就进入死循环,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
using System.Collections.ObjectModel;

namespace WpfApplication21
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private List subs = new List();

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        //问题:增加control没问题,但增加doubleanimation就出错,进入死循环
        DependencyObject t;
       // t = new DoubleAnimation();
       t = new Control();

        subs.Add(t);
        int index = subs.IndexOf(t);
        if (subs.Count > 1)
        {

            DependencyObject previous = subs[index - 1];

            //建立集合元素中的链接
            SetNext(previous, t);
            SetPrevious(t, previous);
        }
    }

    public static object GetPrevious(DependencyObject obj)
    {
        return (object)obj.GetValue(PreviousProperty);
    }

    public static void SetPrevious(DependencyObject obj, object value)
    {
        obj.SetValue(PreviousProperty, value);
    }

    //上一个元素附加属性
    public static readonly DependencyProperty PreviousProperty =
        DependencyProperty.RegisterAttached("Previous", typeof(object), typeof(MainWindow), new UIPropertyMetadata(null));


    public static object GetNext(DependencyObject obj)
    {
        return (object)obj.GetValue(NextProperty);
    }
    public static void SetNext(DependencyObject obj, object value)
    {
        obj.SetValue(NextProperty, value);
    }
    //下一个元素附加属性
    public static readonly DependencyProperty NextProperty =
        DependencyProperty.RegisterAttached("Next", typeof(object), typeof(MainWindow), new UIPropertyMetadata(null));

}

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
谈WPF中的附加属性
附加属性,顾名思义,就是一个原本不属于某个对象,但是由于某种需要或环境,而附加在一个对象上的属性, 也就是把对象放入一个特定的环境下,对象才会拥有的属性,成为附加属性。 在实际的开发中,在设计数据库关系或实体类的时候就会遇到这样的问题。 例如,有个Student的类,他会有属性来标记他所在的学校、班级、年级, public class Student { string ID; str
WPF中使用cs代码设置附加属性的方式
介绍了WPF中使用cs代码设置附加属性的方式
WPF属性(二)附加属性
附加属性是说一个属性本来不属于某个对象,但由于某种需求而被后来附加上,也就是把对象放入一个特定环境后对象才具有的属性就称为附加属性,附加属性的作用就是将属性与数据类型解耦,让数据类型的设计更加灵活,举例,一个TextBox被放在不同的布局容器中时就会有不同的布局属性,这些属性就是由布局容器为TextBox附加上的,附加属性的本质就是依赖属性,二者仅仅在注册和包装器上有一点区别 小技巧,在VS中输
WPF:依赖属性和附加属性示例
public class Button : ButtonBase  {      // 依赖属性      public static readonly DependencyProperty IsDefaultProperty;        static Button()      {         // 注册属性          Button.IsDefaultProperty = Dep
wpf 如何在后台设置附加属性的值
System.Windows.Controls.Grid.SetRow(btnOk, 0); System.Windows.Controls.Grid.SetColumn(btnOk, 0); 就是这个格式就可以了。
附加属性(Attached Properties)基础
附加属性是Extensible Application MarkupLanguage (XAML) 定义的一个概念。 附加属性旨在用作可在任何对象上设置的一类全局属性。 在 Windows Presentation Foundation (WPF) 中,附加属性通常定义为没有常规属性“包装”的一种特殊形式的依赖项属性。也就是说,附加属性是说一个属性本来不属于某个对象,是根据某种特殊需求附加到该
WPF技巧(2)绑定到附加属性
Button Content="{Binding Path=(DockPanel.Dock),ElementName=Element_ListBox,Mode=TwoWay}"> 是可以绑定附加属性的,记得给两侧加括号
(WPF)附加属性
<Window x:Class="DeepXAML.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local
WPF之CLR属性、依赖属性、附加属性
CLR支持静态、实例、抽象和虚属性。属性可以使用任意可访问性修饰符修饰。 属性不能重载。也就是说不能定义名称相同,类型不同的属性。 定义属性时,取决属性的定义,编译器在最后的托管程序集中生成以下两项或三项:   *)代表属性的get访问器方法的一个方法。仅在属性定义了get访问器方法时生成。   *)代表属性的set访问器方法的一个方法。仅在属性定义了set访问器方法时生成。   *)托
关于wpf设置属性的几种方式
注意:这个设置没有优先级,同一个属性只能设置一次。 1 Local control specific style 这种方式仅仅只是对这个控件有效! ==================================code