Небольшое
дополнение ко вчерашнему
посту. Об отличиях в веб-картах 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
Комментариев нет:
Отправить комментарий