Небольшое
дополнение ко вчерашнему
посту. Об отличиях в веб-картах ArcGIS
Silverlight|Flex|JavaScript.
Проблема: на
карте нарисованы обьекты и рядом открыта
таблица с атрибутикой этих обьектов.
Хочу видеть в таблице подсвеченную
запись при выборе обьекта на карте. И
наоборот — выбрав запись в таблице
увидеть подсвеченный обьект на карте.
Они это назвали
«Synchronizing map and data grid interaction».
Для JavaScript
реализация есть
Для Flex реализация
есть
нерабочий
пример
http://serverapps.esri.com/flex/sync_gr_dg/sync_gr_dg.html
Для Silverlight
реализации нет. Ладно-ладно, есть, но
очень странная, нелогичная.
Если кнопок
не нажимать а просто возить мышиный
курсор над картой, в таблице подсвечиваются
записи, но наоборот — нет, возня мышкой
над таблицей никак не отражается на
обьектах карты. Если щелкнуть мышкой
по записи в таблице, запись станет
«выделенной» и обьект на карте станет
подсвеченным, но наоборот — нет. Щелчки
по обьектам карты никак не отражаются
на записях таблицы.
По моему
разумению это бред.
И, в качестве
довеска, рецепт, как реализовать
реагирование обьекта на карте на события
mouseover и selected.
Сделать это
очень просто, достаточно нарисовать
правильный символ раскраски в xaml-файле
и потом назначить этот символ для графики
слоя.
<esri:FillSymbol x:Name="defaultAreaSymbol"> <esri:FillSymbol.ControlTemplate> <ControlTemplate x:Name="CustomPolygonTemplate"> <Grid> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <Storyboard> <ColorAnimation Storyboard.TargetName="Element" Storyboard.TargetProperty="(Fill).(Color)" To="#880000FF" Duration="0:0:0.1" /> </Storyboard> </VisualState> <VisualState x:Name="MouseOver"> <Storyboard> <ColorAnimation Storyboard.TargetName="Element" Storyboard.TargetProperty="(Fill).(Color)" To="#88F000FF" Duration="0:0:0.1" /> </Storyboard> </VisualState> <VisualState x:Name="Selected"> <Storyboard> <ColorAnimation Storyboard.TargetName="Element" Storyboard.TargetProperty="(Fill).(Color)" To="#8800FFFF" Duration="0:0:0.1" /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Path x:Name="Element" Stroke="Blue" Fill="#880000FF" StrokeStartLineCap="Round" StrokeThickness="2" StrokeLineJoin="Round" StrokeEndLineCap="Round" /> </Grid> </ControlTemplate> </esri:FillSymbol.ControlTemplate> </esri:FillSymbol> <esri:LineSymbol x:Key="defaultLineSymbol"> <esri:LineSymbol.ControlTemplate> <ControlTemplate xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"> <Grid> <vsm:VisualStateManager.VisualStateGroups> <vsm:VisualStateGroup x:Name="CommonStates"> <vsm:VisualState x:Name="MouseOver"> <Storyboard> <ColorAnimation BeginTime="0" Storyboard.TargetName="Element" Storyboard.TargetProperty="(Line.Stroke).(SolidColorBrush.Color)" To="#88F000FF" Duration="0:0:0.1" /> <DoubleAnimation BeginTime="0" Storyboard.TargetName="Element" Storyboard.TargetProperty="(Shape.StrokeThickness)" To="4" Duration="00:00:0.1" /> </Storyboard> </vsm:VisualState> <vsm:VisualState x:Name="Normal"> <Storyboard> <ColorAnimation BeginTime="0" Storyboard.TargetName="Element" Storyboard.TargetProperty="(Line.Stroke).(SolidColorBrush.Color)" To="#880000FF" Duration="0:0:0.1" /> </Storyboard> </vsm:VisualState> <vsm:VisualState x:Name="Selected"> <Storyboard> <ColorAnimation BeginTime="0" Storyboard.TargetName="Element" Storyboard.TargetProperty="(Line.Stroke).(SolidColorBrush.Color)" To="#88FFFF00" Duration="0:0:0.1" /> <DoubleAnimation BeginTime="0" Storyboard.TargetName="Element" Storyboard.TargetProperty="(Shape.StrokeThickness)" To="3" Duration="00:00:0.1" /> </Storyboard> </vsm:VisualState> </vsm:VisualStateGroup> </vsm:VisualStateManager.VisualStateGroups> <Path x:Name="Element" Stroke="Blue" StrokeThickness="2" /> </Grid> </ControlTemplate> </esri:LineSymbol.ControlTemplate> </esri:LineSymbol> |
Обратите
внимание на разницу в обращении к
атрибутам
Полигон <ColorAnimation Storyboard.TargetName="Element" Storyboard.TargetProperty="(Fill).(Color)" To="#8800FFFF" Duration="0:0:0.1" /> ... <Path x:Name="Element" Stroke="Blue" Fill="#880000FF" StrokeStartLineCap="Round" StrokeThickness="2" StrokeLineJoin="Round" StrokeEndLineCap="Round" /> Полилиния <ColorAnimation BeginTime="0" Storyboard.TargetName="Element" Storyboard.TargetProperty="(Line.Stroke).(SolidColorBrush.Color)" To="#88FFFF00" Duration="0:0:0.1" /> ... <Path x:Name="Element" Stroke="Blue" StrokeThickness="2" /> |
Догадаться и
сделать полилинию по аналогии с полигоном
— невозможно. Надо знать, что
конкретно писать в обоих случаях. А
подсказки в Студии тут не работают. Если
написать неправильно, все скомпилируется
нормально, но во время работы плагин
сильвера либо повиснет, либо вывалится.
Silverlight должен
умереть.
original post http://vasnake.blogspot.com/2013/02/synchronizing-map-and-data-grid.html
original post http://vasnake.blogspot.com/2013/02/synchronizing-map-and-data-grid.html
Комментариев нет:
Отправить комментарий