当尝试向Canvas添加一个子元素时,抛出ArgumentException异常

本文关键字:元素 一个 异常 ArgumentException 抛出 Canvas 添加 | 更新日期: 2023-09-27 18:16:24

我有一些神秘的ArgumentException,我已经打了一整天了,仍然不知道为什么会发生。

我有下一个简单的方法在我的MainPage:

public void FavsRefresh()
{
    favsCanvas.Children.Clear();
    for (short i = 0; i < (App.Current as App).favUnits.Count; i++)
    {
        FavsItems tmpUnit;
        (App.Current as App).favUnits.TryGetValue((App.Current as App).ids[i], out tmpUnit);
        Canvas.SetTop(tmpUnit.subCanvas, i * 120);
        favsCanvas.Children.Add(tmpUnit.subCanvas);
    }
}

这里tmpUnit是我的类FavsCanvas的一个实例。它的代码无关紧要-它将一些元素合并到画布中,这里称为subCanvas,并且必须将一系列元素添加到父画布中,称为favsCanvas。所有这一切的意义是,我们最初有几个项目,用户可以删除现有的并添加新的。每次删除或添加一个项目时,我都会调用这个过程(包括最初的程序加载)。有趣的是,它在加载过程中工作,当我从另一个页面调用它时,但是当我从类方法调用它时抛出异常,此外,它正确地添加了第一个元素,并拒绝对其他元素这样做。

每个项目都有唯一的名称,我甚至试图不使用名称或使用随机名称-没有机会。我不知道为什么会出现这个异常?!我用下面的代码调用这个方法:

MainPage.MPInstance.FavsRefresh();

这种方法对其他页面有效,但对class -失败。我甚至只留下一行(简单地在Canvas中重新加载这些项目):

private void FavMenuItem_Click(object sender, RoutedEventArgs e)
{
    //Delete favorite
    if (((MenuItem)sender).Header.ToString() == AppRes.FavsMenuDeleteFav)
    {
        MainPage.MPInstance.FavsRefresh();
    }
}

有趣的是,这段代码在我几周前第一次写的时候是可以工作的,但现在不知何故停止了。我尝试的另一件事是从App.xaml.cs中的一个方法中进行这个特定的调用,而这个方法反过来又从类中调用,但它也没有帮助。

事实上,我研究了大多数参数——在这两种情况下,一切都是一样的:当它起作用时,当它不起作用时,除了从哪里调用方法。但我没有看到任何合适的替代方案。

—添加08月05日

我不确定它是否重要,但它总是指向抛出异常的行之后的下一行:(论坛不允许我张贴图片,所以在这里。

我试图将此方法移动到类本身和App.xaml.cs -同样的问题。

它在加载期间被调用时正常工作(我的MainPage是Pivot,这个页面包含这个favCanvas是Pivot之一,但不是第一个),当我从另一个页面调用它时,而重写它的OnNavigatingFrom。当MainPage和这个枢轴处于活动状态时,它被调用。可能有什么问题?

当尝试向Canvas添加一个子元素时,抛出ArgumentException异常

好吧,伙计们,我还是不明白为什么,但我终于找到了一种肮脏的方式。

页面,由于某些原因,不喜欢在它处于活动状态时被修改(至少以这种方式)。因此,现在我被迫简单地重定向到另一个页面,在那里我只调用我的方法,然后返回。

如果你有一些想法,他们仍然是需要的,因为我现在的是像拐杖一样,我不喜欢它