让我先说明问题。我想在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中的每个条目,我想在它周围绘制矩形。
我几乎没有想法如何做到这一点:
谢谢。
答案 0 :(得分:0)
我没有时间挖掘完整的工作解决方案,所以这主要是一系列建议。
每个元素都应该有视图模型
public abstract class Element: INotifyPropertyChanged
{
bool _isSelected;
public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged();
}
}
}
public class EllipseElement : Element {}
public class RectangleElement : Element {}
然后有数据模板可视化元素(我无法为您提供转换器代码,但您可以将其替换为另一个,查看here)。
<DataTemplate DataType="{x:Type local:EllipseElement}">
<Border Visibility="{Binding IsSelected, Converter={local:FalseToHiddenConverter}}">
<Ellipse ... />
</Border>
</DataTemplate>
<DataTemplate DataType="{x:Type local:RectangleElement}">
<Border Visibility="{Binding IsSelected, Converter={local:FalseToHiddenConverter}}">
<Rectangle ... />
</Border>
</DataTemplate>
然后将ObservableCollection
个元素绑定到画布上(这很棘手,请参阅this answer,其中ItemsControl
用于支持绑定)。
您的选择例程必须命中测试元素并设置/重置其IsSelected
属性,这将显示边框。请参阅here,了解如何绘制整个选择矩形。