Estoy intentando utilizar un botón con comportamiento en el MapLayerTemplate de una leyenda de Esri Silverlight SDK 2.1.
Cuando hago clic en el botón y luego arrastro en el mapa, el mapa se desplaza en lugar de mostrar un rectángulo de selección.
El código de comportamiento se extrae de esta muestra mientras que la leyenda es de esta muestra .
Si pongo el mismo código xaml dentro del layoutroot, funciona como se esperaba - veo un rectángulo de selección y la selección se completa con éxito.
<esri:Legend x:Name="MyLegend" Map="{Binding ElementName=MyMap}"
LayerIDs="ProjectPolys,AssetPoints,AssetLines,BaseLayers,WaterInfrastructure,SewerInfrastructure"
LayerItemsMode="Tree"
ShowOnlyVisibleLayers="False"
Refreshed="Legend_Refreshed">
<esri:Legend.MapLayerTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding Label}"
IsChecked="{Binding IsEnabled, Mode=TwoWay}"
IsEnabled="{Binding IsInScaleRange}">
</CheckBox>
<Button Content="Select">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<esriBehaviors:SpatialQueryAction
DrawMode="Rectangle"
LayerID="MyGraphicsLayer"
Url="http://hq-gis-01/ArcGIS/rest/services/WaterInfrastructure2/MapServer/15"
Symbol="{StaticResource GraphicsLayerFillSymbol}"
TargetName="MyMap" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Slider Maximum="1" Value="{Binding Layer.Opacity, Mode=TwoWay}" Width="50" />
</StackPanel>
</DataTemplate>
</esri:Legend.MapLayerTemplate>
<esri:Legend.LayerTemplate>
<DataTemplate>
<CheckBox Content="{Binding Label}"
IsChecked="{Binding IsEnabled, Mode=TwoWay}"
IsEnabled="{Binding IsInScaleRange}" >
</CheckBox>
</DataTemplate>
</esri:Legend.LayerTemplate>
</esri:Legend>
Actualización: Siguiendo la sugerencia de Seth, he probado a conectar el disparador en el código posterior. Obtengo los mismos resultados. El enfoque de código detrás falla para el botón en el datatemplate, pero funciona para el que está en un stackpanel hermano del mapa.
private void Assign_Behavior_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
ESRI.ArcGIS.Client.Actions.SpatialQueryAction sqa = new ESRI.ArcGIS.Client.Actions.SpatialQueryAction();
sqa.DrawMode = DrawMode.Rectangle;
sqa.LayerID = "MyGraphicsLayer";
sqa.Url = @"http://hq-gis-01/ArcGIS/rest/services/WaterInfrastructure2/MapServer/15";
sqa.Symbol = LayoutRoot.Resources["GraphicsLayerFillSymbol"] as Symbol;
sqa.TargetName = "MyMap";
var et = new System.Windows.Interactivity.EventTrigger("Click");
et.Actions.Add(sqa);
var triggerColl = System.Windows.Interactivity.Interaction.GetTriggers(button);
triggerColl.Add(et);
}
Estoy empezando a pensar que esto no es un problema de Esri - no puedo encontrar un ejemplo en cualquier lugar que muestra cómo adjuntar las acciones de disparo de los botones en un datatemplate.