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

问题描述

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

}

}

时间: 2024-10-31 10:16:06

wpf 中 timeline和附加属性奇怪的死循环的相关文章

WPF中自定义漂亮的进度条

wpf中自带的进度条是这个样子德. 在2003中这个进度条的样子就会变得非常难看. 在wpf中您可以自己制作任意样式的进度条.如下图: UserControl.xaml 用户控件 <Grid x:Name="LayoutRoot" Background="Transparent" HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid.Re

WPF中的日历控件

一直很奇怪, WPF中怎么没有日历控件, 这给开发带来了些不便. 这里找到了一个日历控件,是Microsoft开发的, 但其只相当与.net2.0中的普通日历控件,而没有Vista中日历控件那么酷. 本文配套源码

MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件

原文  MSDN 杂志:UI 前沿技术 - WPF 中的多点触控操作事件 UI 前沿技术 WPF 中的多点触控操作事件 Charles Petzold 下载代码示例 就在过去几年,多点触控还只是科幻电影中表现未来主义的一种重要手法,现在俨然已经成为主流的用户界面技术. 多点触控显示屏现在成了新型智能手机和 Tablet 计算机的标准显示屏. 此外,它还可能在公共场所的计算机上普及,例如 Microsoft Surface 率先开发的网亭或桌面计算机. 实际存在的唯一不确定因素是多点触控在常规台式

Wpf中MediaElement循环播放

原文:Wpf中MediaElement循环播放       前一段时间做了一个项目,里面牵涉到媒体文件的循环播放问题,在网上看了好多例子,都是在xaml中添加为MediaElement添加一个TimeLine,不符合我的项目需求,就自己想了一个办法,基本的思路就是在媒体播放完毕后再次Play一下就OK了,废话不多说,首先Show一下我的代码吧:    写一个方法用来动态创建一个MediaElement:这里的ScreenModel是我创建的一个类,大家根据需要可以修改    MediaEleme

学习WPF——了解WPF中的XAML

XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如<Button>映射为WPF的Button对象 XAML可以在一个元素中嵌套另一个元素,例如Grid元素可以嵌套Button元素   了解XAML VisualStudio创建一个窗口,默认情况下产生的代码如下: 这段代码中包含两个标记元素,一个是Window,一个是Grid Window是WPF顶级元素的一种,还有另外两种顶级元素Page和Ap

UI前沿技术-WPF中的多点触控操作事件

就在过去几年,多点触控还只是科幻电影中表现未来主义的一种重要手法,现在俨然已经成为主流的用户界面技术.多点触控显示屏现在成了新型智能手机和 Tablet 计算机的标准显示屏.此外,它还可能在公共场所的计算机上普及,例如 Microsoft Surface 率先开发的网亭或桌面计算机. 实际存在的唯一不确定因素是多点触控在常规台式计算机上的普及.这种普及的最大障碍或许是长时间在垂直屏幕上移动手指所产生的疲劳(称为"大猩猩手臂").我个人希望多点触控的强大功能将切实推进桌面显示屏的重新设计

WPF中如何使用行为示例:Canvas控件拖放行为的演示

1.获取行为的支持,安装Expression Blend 4 SDK(http://www.microsoft.com/zh-cn/download/details.aspx?id=10801) . 2.创建行为库 (1)创建一个Class Project,添加WPF必备的以及WPF中支持行为必备的dll文件. 其中,System.Windows.Interactivity.dll组件在目录(需要安装Blend SDKs):C:\Program Files (x86)\Microsoft SDK

WPF中的Style(风格,样式)

在WPF中我们可以使用Style来设置控件的某些属性值,并使该设置影响到指定范围内的所有该类控件或影响指定的某一控件,比如说我们想将窗口中的所有按钮都保持某一种风格,那么我们可以设置一个Style,而不必分别设置每个按钮的风格. Style是作为一种资源被保存下来的. 看下面的例子: <Window.Resources>        <Style TargetType="Button">       <Setter Property="Fore

WPF 中 ICollectionView 及 ItemsControl 相关的重点

为 OEA 框架 做 WPF 树型表格控件时,浪费了许多时间在一些知识点上,所以写了这篇博客总结一下,和各位博友分享.   ICollectionView 接口的简易使用方法   它的 SortDescriptions.GroupDescription 等属性会影响视图的结构,一般情况下会自动刷新. 也可以直接使用 Refresh 方法来命令视图的刷新(内部实现一般为重建内部视图模型集合). 如果是批量操作,也可以使用 RefreshDefer 方法来抑制多次刷新,待多个更新操作后再统一刷新.