您应该实现MVVM模式,并创建一个视图模型,其中包含表示形状的项目集合,例如几何图形:
public class ViewModel
{
public ObservableCollection<Geometry> Shapes { get; }
= new ObservableCollection<Geometry>();
}
然后在ItemsControl中显示几何体项,该控件的ItemTemplate中有一个Path元素。路径的样式在其
IsMouseOver
属性,该属性设置
Fill
所有物
<ItemsControl ItemsSource="{Binding Shapes}">
<ItemsControl.Resources>
<SolidColorBrush x:Key="NormalBrush" Color="AliceBlue"/>
<SolidColorBrush x:Key="MouseOverBrush" Color="Red"/>
<Style x:Key="ShapeStyle" TargetType="Path">
<Setter Property="Stroke" Value="Black"/>
<Setter Property="Fill" Value="{StaticResource NormalBrush}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" Value="{StaticResource MouseOverBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Path Style="{StaticResource ShapeStyle}" Data="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
按如下方式初始化视图模型:
public MainWindow()
{
InitializeComponent();
var vm = new ViewModel();
vm.Shapes.Add(new EllipseGeometry(new Point(50, 50), 15, 15));
vm.Shapes.Add(new RectangleGeometry(new Rect(85, 85, 30, 30)));
vm.Shapes.Add(new EllipseGeometry(new Point(150, 150), 15, 15));
DataContext = vm;
}