2 votos

¿Cómo utilizar el botón con comportamiento en Silverlight Legend?

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.

1voto

SkyWalker Puntos 11

He podido replicar este problema, puede ser un error de la API de ESRI. Puedes poner un evento Click en el botón Select para golpear el code-behind y luego usar esta técnica para llamar a la acción:

http://forums.arcgis.com/threads/3696-Measure-Action-in-Code?p=11969&viewfull=1#post11969

Como dice Dominique, probablemente no se recomiende el uso de Acciones en el código posterior, sin embargo en este caso, no veo ninguna alternativa.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X