尝试将子项添加到Canvas时ArgumentException

时间:2014-08-03 19:53:05

标签: c# .net windows-phone argumentexception

我有一些神秘的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的一个实例。它的代码并不重要 - 它将一些元素合并到Canvas中,这里称为subCanvas,并且必须将一系列元素添加到父Canvas中,称为favsCanvas。 所有这一点,我们最初有几个项目,用户可能会删除现有的并添加新项目。每次删除或添加项目时,我都会调用此过程(包括最初的程序加载)。 这个笑话是它在加载过程中以及从其他页面调用它时起作用,但是当我从类方法调用它时抛出异常,除了它正确添加第一个元素并拒绝与其他元素一起使用。

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

MainPage.MPInstance.FavsRefresh();

这种方式适用于其他页面,但来自类 - 失败。我甚至只留下了一行(简单地在Canvas中重新加载这些项目):

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

有趣的是,这段代码在我几周前首次编写时有效,但现在却停止了。 我尝试的另一件事是从App.xaml.cs中的一个方法进行这个特定的调用,而这个方法又从类中调用,但它也没有用。

事实上,我已经研究了大多数参数 - 在两种情况下一切都是相同的:当它工作时和不工作时,除了调用方法的地方。但我没有看到任何合适的选择。

--- 8月5日加入

我不确定它是否重要,但它始终指向引发异常的行之后的下一行: (论坛不允许我发布图片,所以here

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

在加载期间调用时它正常工作(我的MainPage是Pivot,包含此favCanvas的页面是其中一个,但不是第一个),当我在覆盖其OnNavigatingFrom时从另一个页面调用它时。并且当MainPage和此数据透视图处于活动状态时调用它。可能是那样的东西?

1 个答案:

答案 0 :(得分:0)

好吧,伙计们,我仍然无法理解其中的原因,但最后却发现了一种肮脏的走路方式。

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

如果你有一些想法,他们仍然有需求,因为我的潮流就像拐杖而我不喜欢