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());
}
答案 0 :(得分:6)
您不应该将同一控件指定为两个不同控件的子/内容。
至于您的问题,.NET framework 4.5可能会在这种情况下放松或修改行为。即使您的应用程序以4.0为目标,它仍然在.NET 4.5运行时中执行。换句话说,.NET 4.5取代了.NET 4.0而不是并行工作。