通过DataTriggers为ItemsControl设置动画时崩溃

时间:2018-11-10 16:52:18

标签: xaml animation observablecollection datatrigger rendertransform

序言

我正在编写一个程序,该程序的地图类包含背景图像和具有颜色,位置和动画属性的节点列表(ObservableCollection)。顶部的WPF应用程序对此进行了引用

问题

我有一个GameMapModel类型的对象,其中包含一个可观察到的GameMapNode类型的集合:

var category1 = ["item1", "item2", "item3"];
var category2 = ["item4", "item5", "item6", "item7", "item8"];
var category3 = ["item9", "item10"];

var allcategories = [category1, category2, category3];

然后我有一个UserControl,它根据GameMapModel的内容呈现地图背景和节点:

    [AddINotifyPropertyChangedInterface]
public class GameMapModel
{
    public ObservableCollection<GameMapNode> GameMapNodes { get; set; } = new ObservableCollection<GameMapNode>();
    public GameMapNode SelectedNode { get; set; }
    public BitmapImage Background { get; set; } = GameMap.jpg; //Link removed for forum post.


    public GameMapModel()
    {
        //SelectedNode = new GameMapNode(0, 0, Brushes.White, "Default");
    }
}

[AddINotifyPropertyChangedInterface]
public class GameMapNode
{
    public int X { get; set; } = 0;
    public int Y { get; set; } = 0;
    public Brush Colour { get; set; } = Brushes.Gray;
    public string Name { get; set; } = "Default";
    public bool Pulse { get; set; } = false;
    public bool Spin { get; set; } = false;
    public bool Throb { get; set; } = false;
    public bool Bounce { get; set; } = false;

    public GameMapNode(int x, int y, Brush colour, String name)
    {
        X = x;
        Y = y;
        //Colour = colour;
        Name = name;
    }

    public void ChangeTeam()
    {
        if (Colour == Brushes.Blue)
        {
            Colour = Brushes.Red;
            Spin = true;
            Bounce = true;
            Pulse = true;
            Throb = true;
        }
        else
        {
            Colour = Brushes.Blue;
            Spin = false;
            Bounce = false;
            Pulse = false;
            Throb = false;
        }
    }
}

现在所有这些都可以正常工作 IF ,当我创建GameMapNode的新实例并将其添加到集合中时,Spin,Bounce和Throb都为false,之后,我可以将其中的任何一个都设置为true和动画按预期工作。

如果在对象创建过程中将这3个设置为true,则会出现以下错误,程序崩溃:

  

System.Windows.Markup.XamlParseException:” [未知]属性未指向路径'(0)。(1)[0]。(2)'中的DependencyObject。'

如果我注释掉XAML的Spin / Throb / Bounce DoubleAnimation块,则动画不起作用,但程序不会崩溃。

即使在对象创建过程中将Pulse设置为true,Opacity动画也无法正常工作。

这使我认为与TransformGroup实现有关某事,因为这并未用于脉冲。也许在首次尝试DataTrigger之前未加载它们?

这是我的第一个真正的WPF应用程序,我有一位出色的导师帮助我完成了该应用程序,但即使他也感到沮丧。任何建议的帮助将不胜感激:)

0 个答案:

没有答案