【发布时间】:2014-06-14 17:08:27
【问题描述】:
我需要创建几种样式来代表不同的点对象,它们都做同样的事情。更具体地说,它是一堆 ESRI MarkerSymbol,可以是圆形、方形、星形等,但可能与特定问题无关。
当用户悬停或单击它们时,每个点的行为方式完全相同 - 这是通过 Visual State Groups 完成的(我删除了几个动画以节省空间:
<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>
然后说一个方形和一个星形,以此类推。希望这是有道理的。
【问题讨论】:
-
可能重复:Re-Use Animations in VisualStates - 我也很想找到一种方法。
标签: visual-studio silverlight xaml controltemplate arcobjects