Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2013-02-22

Synchronizing map and data grid interaction

Небольшое дополнение ко вчерашнему посту. Об отличиях в веб-картах ArcGIS Silverlight|Flex|JavaScript.

Проблема: на карте нарисованы обьекты и рядом открыта таблица с атрибутикой этих обьектов. Хочу видеть в таблице подсвеченную запись при выборе обьекта на карте. И наоборот — выбрав запись в таблице увидеть подсвеченный обьект на карте.
Они это назвали «Synchronizing map and data grid interaction».

Для JavaScript реализация есть

Для Flex реализация есть

Для 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

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)