Мне нужно создать несколько стилей, представляющих разные точечные объекты, которые делают одно и то же. Чтобы быть более конкретным, это набор символов маркеров ESRI, который может быть кругом, квадратом, звездой и т. д., но, вероятно, не имеет отношения к конкретной проблеме.
Каждая точка будет вести себя точно так же, когда пользователь наводит на них курсор или щелкает — это делается с помощью групп визуального состояния (я удалил несколько анимаций для экономии места:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard Storyboard.TargetName="shapeElement">
<DoubleAnimation BeginTime="0:0:0" Duration="0:0:0.5"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
To="1" />
<DoubleAnimation BeginTime="0:0:0" Duration="0:0:0.5"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
To="1" />
...................................................................
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal">
<Storyboard Storyboard.TargetName="shapeElement2">
<DoubleAnimation BeginTime="0:0:0" Duration="0:0:0.1"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
To="1" />
<DoubleAnimation BeginTime="0:0:0" Duration="0:0:0.1"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
To="1" />
<ObjectAnimationUsingKeyFrames BeginTime="0:0:0.1" Duration="0:0:0"
Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="MouseOver">
<Storyboard Storyboard.TargetName="shapeElement2">
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="0:0:0.01"
Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<DoubleAnimation BeginTime="00:00:00" Duration="0:0:0.1"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleX)"
To="1.75" />
<DoubleAnimation BeginTime="00:00:00" Duration="0:0:0.1"
Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)"
To="1.75" />
...................................................................
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
Поскольку я хочу создать несколько фигур, которые будут использовать эту коллекцию групп визуальных состояний, как мне превратить ее в ресурс? Другими словами, как бы я это сделал:
<esri:MarkerSymbol x:Key="CircleLocationPointMarker" OffsetX="6" OffsetY="6" >
<esri:MarkerSymbol.ControlTemplate>
<ControlTemplate>
<Grid >
<Ellipse x:Name="shapeElement">
..............................................
</Ellipse>
<Ellipse x:Name="shapeElement2">
..............................................
</Ellipse>
<Border x:Name="LocationLabel">
..............................................
</Border>
<VisualStateManager.VisualStateGroups>
---HOW DO I USE A RESOURCE OR SEVERAL RESOURCES??---
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</esri:MarkerSymbol.ControlTemplate>
</esri:MarkerSymbol>
и произнесите еще один для Квадрата и Звезды, и так далее. Надеюсь, это имеет смысл.