WPF在不同的环境中有不同的行为?

时间:2013-07-23 07:53:05

标签: c# wpf

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    try
    {
        RichTextBox myRTB = new RichTextBox();
        ListViewItem lvi1 = new ListViewItem();
        ListViewItem lvi2 = new ListViewItem();
        lvi1.Content = myRTB;
        lvi2.Content = myRTB;

        this.lstView1.Items.Add(lvi1);
        this.lstView2.Items.Add(lvi2);
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }
}

两台机器:
机器1:Windows 7 32bit,.net4.0安装
机器2:安装了Windows 8 64位,.net4.0 / 4.5

上面的代码总是在机器1上崩溃,除了“指定的元素已经是另一个元素的逻辑子元素,首先断开它。

但是,它适用于机器2.(lvi2的内容实际上是空的)

有人可以详细解释,为什么会发生?(注意:测试应用程序是使用VS2010,.net 4.0构建的)

补充:以下代码具有相同的问题(在机器2上工作,而不是机器1)

    try
    {
        RichTextBox myRTB = new RichTextBox();
        ListViewItem lvi1 = new ListViewItem();               
        lvi1.Content = myRTB;
        this.lstView1.Items.Add(lvi1);
        this.lstView1.Items.Remove(lvi1);
        ListViewItem lvi2 = new ListViewItem();
        lvi2.Content = myRTB;
        this.lstView2.Items.Add(lvi2);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
    }

1 个答案:

答案 0 :(得分:6)

您不应该将同一控件指定为两个不同控件的子/内容。

至于您的问题,.NET framework 4.5可能会在这种情况下放松或修改行为。即使您的应用程序以4.0为目标,它仍然在.NET 4.5运行时中执行。换句话说,.NET 4.5取代了.NET 4.0而不是并行工作。