让我先说明问题 . 我想在Canvas周围实现包装器(让我称之为Page),它将实现选择实际选择的UIElements周围的矩形 . 为此,我实现了ISelect接口,如下所示:
interface ISelect {
Point Center {get; set;} //Center of selecting rectangle
Size Dimensions {get; set;} //Dimensions of selecting rectangle
}
放到Page的每个对象都实现了ISelect接口 . Page具有ObservableCollection类型的SelectedElements,它保存对所有当前所选元素的引用 .
对于SelectedElements中的每个条目,我想在它周围绘制矩形 .
我几乎没有想法如何做到这一点:
-
每个UIElement都可以自己实现这个矩形并在选中时显示它 . 此选项需要新对象每次都实现此目的 . 所以我宁愿不使用它 .
-
在页面中,我可以在代码隐藏中创建矩形,并将它们添加到页面中 . 它不是MVVM推荐的原则 .
-
在页面XAML中创建一些类似ItemsControl的背后,并使用特定模板将其绑定到SelectedElements . 这个选项对我来说似乎是最好的选择 . 请帮我这个方向 . 我应该以某种方式使用ItemsControl?
谢谢 .
1 回答
我没有时间挖掘完整的工作解决方案,所以这主要是一系列建议 .
每个元素都应该有视图模型
然后有数据模板可视化元素(我不能给你转换器代码,但你可以用另一个代替它,看看here) .
然后将
ObservableCollection
元素绑定到画布(这很棘手,请参阅this answer,其中ItemsControl
用于支持绑定) .您的选择例程必须命中测试元素并设置/重置它们的
IsSelected
属性,这将显示边框 . 有关如何绘制全部选择矩形的信息,请参见here .