【发布时间】:2016-02-19 21:34:34
【问题描述】:
让我先说明问题。我想在 Canvas 周围实现包装器(让我称之为 Page),它将在实际选择的 UIElements 周围实现选择矩形。 为此,我实现了 ISelect 接口,如下所示:
interface ISelect {
Point Center {get; set;} //Center of selecting rectangle
Size Dimensions {get; set;} //Dimensions of selecting rectangle
}
每个放入 Page 的对象都实现了 ISelect 接口。 页面具有 ObservableCollection 类型的 SelectedElements,它包含对所有当前选定元素的引用。
对于 SelectedElements 中的每个条目,我想在其周围绘制矩形。
我对如何做到这一点没有什么想法:
- 每个 UIElement 都可以自己实现这个矩形并在选中时显示它。此选项将要求新对象每次都执行此操作。所以我宁愿不使用它。
- 在页面中,我可以在代码隐藏中创建矩形并将它们添加到页面中。这不是 MVVM 推荐的原则。
- 在页面 XAML 中创建类似于 ItemsControl 的内容,并将其绑定到具有特定模板的 SelectedElements。这个选项对我来说似乎是最好的。请在这个方向上帮助我。我应该以某种方式使用 ItemsControl 吗?
谢谢。
【问题讨论】:
-
搜索装饰器(可视化选择)。或者,如果您更喜欢单独的选择,那么您可以在
Border(使用数据模板)中托管每个视觉对象,而不是直接将视觉对象添加到Canvas,其可见性绑定到该视觉对象的视图模型的IsSelected属性。 -
嗨。感谢您的快速回复。你的方法有什么例子吗?
标签: c# wpf xaml mvvm itemscontrol