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

C# WPF在不同的环境中有不同的行为?,c#,wpf,C#,Wpf,两台机器: 计算机1:已安装Windows 7 32位.net4.0 计算机2:已安装Windows 8 64位.net4.0/4.5 上述代码总是在机器1上崩溃,例外情况是“指定的元素已经是另一个元素的逻辑子元素,请先断开它 但是,它在机器2上工作。(lvi2的内容实际上是空的) 有人能详细解释一下为什么会这样吗?(注:测试应用程序是用VS2010、.net 4.0构建的) 添加:以下代码具有相同问题(在机器2上工作,而不是在机器1上工作) 不应将同一控件指定为两个不同控件的子控件/内容 至于

两台机器:
计算机1:已安装Windows 7 32位.net4.0
计算机2:已安装Windows 8 64位.net4.0/4.5

上述代码总是在机器1上崩溃,例外情况是“指定的元素已经是另一个元素的逻辑子元素,请先断开它

但是,它在机器2上工作。(lvi2的内容实际上是空的)

有人能详细解释一下为什么会这样吗?(注:测试应用程序是用VS2010、.net 4.0构建的)

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


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


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

我自己也有过这样的经历,似乎4.5很乐意移动insta将myRTB复制到可视化树中的一个新位置,在该位置4.0刚刚崩溃,无论哪种方式,代码都不能像您预期的那样工作,您都无法获得myRTB的2个可视化。没有.NET 4.5运行时。它是.NET 4运行时,上面有一系列框架更改。
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());
    }
}
    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());
    }