我正在尝试在WPF中创建一个纸牌游戏,我得到错误:指定的Visual已经是另一个Visual的子项或CompositionTarget的根 . 我有一个带有listview的窗口(名为:handListview) . listview的itemssource设置为
ObservableCollection<System.Windows.Controls.Image>
叫_hand .
当我悬停图像时,它通过鼠标移动事件将悬停的图像源添加到播放画布旁边的Image控件(称为LargeCardPreview).source,显示悬停图像的放大 .
当我双击图像时,我将它从_hand中删除,并作为子元素添加到名为playCanvas的播放画布中 . (我使用playCanvas.Children.Add) .
这就是问题出现的地方,当我双击图像时,我从_hand集合中删除了卡片(最初的想法是将元素与HandListView断开连接,因为它绑定到集合),并触发“OnCardPlayed”事件 . 在这甚至我添加卡到playCanvas.Children集合 . 但后来我得到了错误 .
我认为这可能是因为LargeImagePreview阻止了它,所以我将源设置为Null . 没变 .
所以我猜它是因为即使我从_hand observablecollection中删除了卡片,图像也不会立即断开连接 . 那么如何强行断开连接呢?
希望我的问题足够清楚 .
1 回答
而不是仅仅尝试描述您的程序,您应该考虑发布相关的代码部分 .
但是你的approch有一个普遍的问题 . 当您还打算在应用程序的其他位置显示这些图像时,不应将Image控件用作ListView项 . 使用ImageSource作为项类型(将
ItemsSouce
设置为ObservableCollection<ImageSource>
)并为ListView定义适当的ItemTemplate .现在,当您将ListView的
SelectedItem
添加到Canvas时,您将创建一个新的Image控件: