3
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 64bit,.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());
    }
4

1 回答 1

6

您不应该将相同的控件分配为两个不同控件的子/内容。

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

于 2013-07-23T07:58:14.763 回答