首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >断开图像:指定的可视对象已是另一个可视对象的子项或CompositionTarget的根

断开图像:指定的可视对象已是另一个可视对象的子项或CompositionTarget的根
EN

Stack Overflow用户
提问于 2012-07-31 16:14:59
回答 1查看 436关注 0票数 0

我试图在WPF中创建一个纸牌游戏,我得到了错误:指定的视觉已经是另一个视觉的孩子或CompositionTarget的根。我有一个包含列表视图的窗口(名为: handListview)。列表视图的itemssource设置为

代码语言:javascript
复制
ObservableCollection<System.Windows.Controls.Image>

叫做_hand。

当我悬停图像时,它显示了悬停图像的放大,方法是让鼠标移动事件将悬停图像源添加到play canvas旁边的图像控件(名为LargeCardPreview) .source中。

当我双击一个图像时,我会将它从_hand中删除,并作为一个子元素添加到名为playCanvas的play画布中。(我使用playCanvas.Children.Add)。

这就是问题所在,当我双击图像时,我从_hand集合中删除了卡片(最初认为这会断开元素与HandListView的连接,因为它绑定到了集合),并触发了一个"OnCardPlayed“事件。在这里,我甚至将卡片添加到playCanvas.Children集合中。但后来我得到了错误。

我认为这可能是因为LargeImagePreview阻止了它,所以我将源设置为空。没有变化。

所以我猜这是因为即使我从_hand可见集合中删除了卡,图像也不会立即断开连接。那么我如何强制断开连接呢?

希望我的问题足够清楚。

EN

回答 1

Stack Overflow用户

发布于 2012-07-31 17:16:40

与其仅仅试图描述你的程序做了什么,你还应该考虑发布相关的代码部分。

然而,你的方法有一个普遍的问题。如果还打算在应用程序的其他位置显示这些图像,则不应将Image控件用作ListView项。使用ImageSource作为项目类型(将ItemsSouce设置为ObservableCollection<ImageSource>),并为您的ListView定义适当的ItemTemplate

代码语言:javascript
复制
<ListView>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding}"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

现在,当您将ListView的SelectedItem添加到画布时,您将创建一个新的Image控件:

代码语言:javascript
复制
Image image = new Image { Source = list.SelectedItem as ImageSource };
Canvas.SetLeft(image, ...);
Canvas.SetTop(image, ...);
canvas.Children.Add(image);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11735845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档