<Image Source="images/zoom.png"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <esri:ZoomToAction TargetName="Map"> <esri:ZoomToAction.Geometry> Use some binding here to get the envelope </esri:ZoomToAction.Geometry> </esri:ZoomToAction> </i:EventTrigger> </i:Interaction.Triggers> </Image>
<Button Style="{StaticResource MenuItem}"
Content="Zoom To" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<esri:ZoomToAction
TargetName="MyMap">
<esri:ZoomToAction.Geometry>
<esri:Envelope XMin="-14930991.170" YMin="3611744.037" XMax="-11348896.882" YMax="5340571.181" />
</esri:ZoomToAction.Geometry>
</esri:ZoomToAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Style="{StaticResource MenuItem}"
Content="Zoom To Layer" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<esri:ZoomToLayerAction
LayerID="MyFeatureLayer"
TargetName="MyMap" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
But, the trigger does not seem to do anything.
Question: Does the ZoomToLayerAction work only for a Feature layer, or should it also work for any layer in a ArcGISDynamicMapServiceLayer?
private void imgZoomToLayer_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Image img = (Image)sender;
string layer = img.Tag.ToString();
ESRI.ArcGIS.Client.Geometry.Envelope envLayer = FindLayerExtent(layer);
envLayer.SpatialReference = Map.SpatialReference;
Map.ZoomTo(envLayer as ESRI.ArcGIS.Client.Geometry.Envelope);
}
private ESRI.ArcGIS.Client.Geometry.Envelope FindLayerExtent(string desiredLayer)
{
ESRI.ArcGIS.Client.Geometry.Envelope envLayer = null;
foreach (ESRI.ArcGIS.Client.Layer service in Map.Layers)
{
string sname = service.ID;
if (service.GetType().ToString() == "ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer")
{
ArcGISDynamicMapServiceLayer l = (ArcGISDynamicMapServiceLayer)service;
foreach (ESRI.ArcGIS.Client.LayerInfo slayer in l.Layers)
{
if (desiredLayer == slayer.Name)
{
envLayer = Map.Layers[l.ID].FullExtent;
}
}
}
}
return envLayer;
}
<esri:Legend.MapLayerTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding Label}"
IsChecked="{Binding IsEnabled, Mode=TwoWay}"
IsEnabled="{Binding IsInScaleRange}" >
</CheckBox>
<Slider Maximum="1" Value="{Binding Layer.Opacity, Mode=TwoWay}" Width="50" />
<Button Content="Zoom" Click="Button_Click" Tag="{Binding Layer.FullExtent}"/>
</StackPanel>
</DataTemplate>
</esri:Legend.MapLayerTemplate>
private void Button_Click(object sender, RoutedEventArgs e)
{
var extent = (sender as Button).Tag as Envelope;
MyMap.ZoomTo(extent);
}