You are on page 1of 10

<UserControl x:Class="ArcGISSilverlightSDK.SpatialQuery" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:esri="http://schemas.esri.com/arcgis/client/2009" xmlns:slData="clr-namespace:System.Windows.Controls;assembly=System.Windows. Controls.Data" xmlns:slPrimitives="clr-namespace:System.Windows.Controls.Primitives;assembl y=System.Windows.Controls.Data" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> <Grid x:Name="LayoutRoot" Background="White"> <Grid.

Resources> <Style x:Key="MyCustomRow" TargetType="slData:DataGridRow"> <Setter Property="IsTabStop" Value="False" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="slData:DataGridRow"> <slPrimitives:DataGridFrozenGrid Name="Root"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration= "0" /> </VisualStateGroup.Transitions> <VisualState x:Name="Normal" > <Storyboard> <DoubleAnimation Storyboard.Targ etName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To =".5"/> <ColorAnimationUsingKeyFrames Be ginTime="0" Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard. TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> <SplineColorKeyFrame KeyTime ="0" Value="#ebf4fa"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="Normal AlternatingR ow"> <Storyboard> <DoubleAnimation Storyboard.Targ etName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To ="0"/> <ColorAnimationUsingKeyFrames Be ginTime="0" Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard. TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> <SplineColorKeyFrame KeyTime ="0" Value="#bbd9ee"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="MouseOver"> <Storyboard> <DoubleAnimation Storyboard.Targ etName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To =".5"/> <ColorAnimationUsingKeyFrames Be ginTime="0" Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard. TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> <SplineColorKeyFrame KeyTime

="0" Value="#8800FFFF"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="Normal Selected"> <Storyboard> <DoubleAnimation Storyboard.Targ etName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To ="1"/> <ColorAnimationUsingKeyFrames Be ginTime="0" Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard. TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> <SplineColorKeyFrame KeyTime ="0" Value="#8800FFFF"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="MouseOver Selected" > <Storyboard> <DoubleAnimation Storyboard.Targ etName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To ="1"/> <ColorAnimationUsingKeyFrames Be ginTime="0" Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard. TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> <SplineColorKeyFrame KeyTime ="0" Value="#8800FFFF"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> <VisualState x:Name="Unfocused Selected" > <Storyboard> <DoubleAnimation Storyboard.Targ etName="BackgroundRectangle" Storyboard.TargetProperty="Opacity" Duration="0" To ="1"/> <ColorAnimationUsingKeyFrames Be ginTime="0" Duration="0" Storyboard.TargetName="BackgroundRectangle" Storyboard. TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"> <SplineColorKeyFrame KeyTime ="0" Value="#8800FFFF"/> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.Resources> <Storyboard x:Key="DetailsVisibleTransition"

> <DoubleAnimation Storyboard.TargetName=" DetailsPresenter" Storyboard.TargetProperty="ContentHeight" Duration="00:00:0.1" /> </Storyboard> </Grid.Resources> <Rectangle x:Name="BackgroundRectangle" Grid.Row Span="2" Grid.ColumnSpan="2" Opacity="0" Fill="#FFFFCC00"/> <slPrimitives:DataGridRowHeader Grid.RowSpan="3" Name="RowHeader" slPrimitives:DataGridFrozenGrid.IsFro zen="True" /> <slPrimitives:DataGridCellsPresenter Grid.Column ="1" Name="CellsPresenter" slPrimitives:DataGridFrozenGrid.IsFro zen="True" /> <slPrimitives:DataGridDetailsPresenter Grid.Row= "1" Grid.Column="1" Name="DetailsPresenter" /> <Rectangle Grid.Row="2" Grid.Column="1" Name="Bo ttomGridLine" HorizontalAlignment="Stretch" Height="1" /> </slPrimitives:DataGridFrozenGrid> </ControlTemplate> </Setter.Value> </Setter> </Style> <esri:SimpleMarkerSymbol x:Key="DefaultMarkerSymbol" Color="Red" Siz e="12" Style="Circle" /> <esri:SimpleLineSymbol x:Key="DefaultLineSymbol" Color="Red" Width=" 4" /> <esri:FillSymbol x:Key="DefaultFillSymbol" > <esri:FillSymbol.ControlTemplate> <ControlTemplate> <Path x:Name="Element" IsHitTestVisible="False" Fill="#6 6FF0000" Stroke="Red" StrokeThickness="1"/> </ControlTemplate> </esri:FillSymbol.ControlTemplate> </esri:FillSymbol> <esri:FillSymbol x:Key="ResultsFillSymbol"> <esri:FillSymbol.ControlTemplate> <ControlTemplate x:Name="CustomPolygonTemplate"> <Grid> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualState x:Name="Normal"> <Storyboard> <ColorAnimation Storyboard.TargetNam e="Element" Storyboard.TargetProperty="(Fill ).(Color)" To="#880000FF" Duration="0:0:0.1 " /> </Storyboard> </VisualState> <VisualState x:Name="MouseOver">

<Storyboard> <ColorAnimation Storyboard.TargetNam e="Element" Storyboard.TargetProperty="(Fill ).(Color)" To="#8800FFFF" Duration="0:0:0.1 " /> </Storyboard> </VisualState> <VisualState x:Name="Selected"> <Storyboard> <ColorAnimation Storyboard.TargetNam e="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> </Grid.Resources> <esri:Map x:Name="MyMap" WrapAround="True" Extent="-15000000,2000000,-70 00000,8000000"> <esri:ArcGISTiledMapServiceLayer ID="StreetMapLayer" Url="http://services.arcgisonline.com/ArcGIS/rest/services /World_Street_Map/MapServer"/> <esri:GraphicsLayer ID="MySelectionGraphicsLayer" MouseEnter="GraphicsLayer_MouseEnter" MouseLeave="GraphicsLayer_MouseLeave" /> </esri:Map> <Canvas Width="350" Height="110" HorizontalAlignment="Right" VerticalAli gnment="Top" Margin="0,5,5,0" > <Rectangle Fill="#77919191" Stroke="Gray" RadiusX="10" RadiusY="10" Canvas.Left="0" Canvas.Top="0" Width="350" Height="110" > <Rectangle.Effect> <DropShadowEffect/> </Rectangle.Effect> </Rectangle> <Rectangle Fill="#FFFFFFFF" Stroke="DarkGray" RadiusX="5" RadiusY="5 " Canvas.Left="10" Canvas.Top="10" Width="330" Height="90" /> <TextBlock x:Name="ToolTextBlock" Text="Use these tools to select st ates from the map." Foreground="Black" Width="300" TextAlignment="Center" FontSize="9" FontWeight="Bold" Canvas.Lef t="20" Canvas.Top="10" /> <StackPanel Orientation="Vertical" Canvas.Top="5" Canvas.Left="20"> <esri:Toolbar x:Name="esriTools" MaxItemHeight="80" MaxItemWidth ="80" Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Ce

nter" ToolbarItemClicked="esriTools_ToolbarItemClicked" Width="300" Height="80"> <esri:Toolbar.Items> <esri:ToolbarItemCollection> <esri:ToolbarItem Text="Select by clicking at point location"> <esri:ToolbarItem.Content> <Image Source="/Assets/images/DrawPoint.png" Stretch="UniformToFill" Margin="5" /> </esri:ToolbarItem.Content> </esri:ToolbarItem> <esri:ToolbarItem Text="Select by clicking a Polylin e"> <esri:ToolbarItem.Content> <Image Source="/Assets/images/DrawPolyline.p ng" Stretch="UniformToFill" Margin="5" /> </esri:ToolbarItem.Content> </esri:ToolbarItem> <esri:ToolbarItem Text="Select by clicking a Polygon "> <esri:ToolbarItem.Content> <Image Source="/Assets/images/DrawPolygon.pn g" Stretch="UniformToFill" Margin="5" /> </esri:ToolbarItem.Content> </esri:ToolbarItem> <esri:ToolbarItem Text="Select by dragging a Rectang le"> <esri:ToolbarItem.Content> <Image Source="/Assets/images/DrawRectangle. png" Stretch="UniformToFill" Margin="5" /> </esri:ToolbarItem.Content> </esri:ToolbarItem> <esri:ToolbarItem Text="Cancel Selection Tools"> <esri:ToolbarItem.Content> <Image Source="/Assets/images/StopDraw.png" Stretch="UniformToFill" Margin="5" /> </esri:ToolbarItem.Content> </esri:ToolbarItem> </esri:ToolbarItemCollection> </esri:Toolbar.Items> </esri:Toolbar> <TextBlock x:Name="StatusTextBlock" Text="" FontWeight="Bold" Ho rizontalAlignment="Center"/> </StackPanel> </Canvas> <Border x:Name="ResultsDisplay" Background="#77919191" BorderThickness=" 1" CornerRadius="5" HorizontalAlignment="Right" VerticalAlignment="Bottom" Visibili ty="Collapsed" Margin="5" Padding="10" BorderBrush="Black"> <Border.Effect> <DropShadowEffect/> </Border.Effect> <Grid> <Grid.RowDefinitions> <RowDefinition Height="15" /> <RowDefinition Height="*" />

</Grid.RowDefinitions> <TextBlock x:Name="DataDisplayTitle" Text="Search Results" Foreg round="Black" FontSize="9" Grid.Row="0" FontWeight="Bold" /> <sdk:DataGrid x:Name="QueryDetailsDataGrid" Grid.Row="1" Width=" Auto" Height="170" AutoGenerateColumns="False" CanUserSortColumns=" True" VerticalAlignment="Top" HorizontalAlignment="Lef t" HeadersVisibility="Column" HorizontalScrollBarVi sibility="Hidden" SelectionChanged="QueryDetailsDataGrid_Selection Changed" LoadingRow="QueryDetailsDataGrid_LoadingRow" RowStyle="{StaticResource MyCustomRow}"> <sdk:DataGrid.Columns> <sdk:DataGridTextColumn CanUserSort="True" Binding="{Bin ding Attributes[STATE_NAME]}" Header="State Name"/> <sdk:DataGridTextColumn CanUserSort="False" Binding="{Bi nding Attributes[SUB_REGION]}" Header="Region"/> <sdk:DataGridTextColumn CanUserSort="False" Binding="{Bi nding Attributes[STATE_FIPS]}" Header="FIPS"/> <sdk:DataGridTextColumn CanUserSort="False" Binding="{Bi nding Attributes[STATE_ABBR]}" Header="Abbreviation"/> <sdk:DataGridTextColumn CanUserSort="False" Binding="{Bi nding Attributes[POP2000]}" Header="Population 2000"/> <sdk:DataGridTextColumn CanUserSort="True" Binding="{Bi nding Attributes[POP2007]}" Header="Population 2007"/> </sdk:DataGrid.Columns> </sdk:DataGrid> <!--<slData:DataGrid x:Name="QueryDetailsDataGrid" Grid.Row="1" Width="Auto" Height="170" AutoGenerateColumns="False" HeadersVisibility="Column" Background="White" IsReadOnly="True" HorizontalScrollBarVisibility="Hi dden" RowStyle="{StaticResource MyCustomRow}" CanUserSort Columns="True" SelectionChanged="QueryDetailsDataGrid_SelectionCha nged" LoadingRow="QueryDetailsDataGrid_LoadingRow"> <slData:DataGrid.Columns> <slData:DataGridTextColumn CanUserSort="True" SortMember Path="STATE_NAME" Binding="{Binding Attributes[STATE_NAME]}" Header="State Name" /> <slData:DataGridTextColumn CanUserSort="False" Binding=" {Binding Attributes[SUB_REGION]}" Header="Region"/> <slData:DataGridTextColumn CanUserSort="False" Binding=" {Binding Attributes[STATE_FIPS]}" Header="FIPS"/> <slData:DataGridTextColumn CanUserSort="False" Binding=" {Binding Attributes[STATE_ABBR]}" Header="Abbreviation"/> <slData:DataGridTextColumn CanUserSort="False" Binding=" {Binding Attributes[POP2000]}" Header="Population 2000"/> <slData:DataGridTextColumn CanUserSort="True" SortMembe rPath="POP2007" Binding="{Binding Attributes[POP2007]}" Header="Population 2007" /> </slData:DataGrid.Columns> </slData:DataGrid>--> </Grid> </Border>

</Grid> </UserControl> -------------------------------using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Input; using ESRI.ArcGIS.Client; using ESRI.ArcGIS.Client.Symbols; using ESRI.ArcGIS.Client.Tasks; using ESRI.ArcGIS.Client.ValueConverters; namespace ArcGISSilverlightSDK { public partial class SpatialQuery : UserControl { private Draw MyDrawSurface; public SpatialQuery() { InitializeComponent(); MyDrawSurface = new Draw(MyMap) { LineSymbol = LayoutRoot.Resources["DefaultLineSymbol"] as SimpleLi neSymbol, FillSymbol = LayoutRoot.Resources["DefaultFillSymbol"] as FillSymb ol }; MyDrawSurface.DrawComplete += MyDrawSurface_DrawComplete; } private void esriTools_ToolbarItemClicked(object sender, ESRI.ArcGIS.Cli ent.Toolkit.SelectedToolbarItemArgs e) { switch (e.Index) { case 0: // Point MyDrawSurface.DrawMode = DrawMode.Point; break; case 1: // Polyline MyDrawSurface.DrawMode = DrawMode.Polyline; break; case 2: // Polygon MyDrawSurface.DrawMode = DrawMode.Polygon; break; case 3: // Rectangle MyDrawSurface.DrawMode = DrawMode.Rectangle; break; default: // Clear MyDrawSurface.DrawMode = DrawMode.None; GraphicsLayer selectionGraphicslayer = MyMap.Layers["MySelec tionGraphicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics(); QueryDetailsDataGrid.ItemsSource = null; ResultsDisplay.Visibility = Visibility.Collapsed;

break; } MyDrawSurface.IsEnabled = (MyDrawSurface.DrawMode != DrawMode.None); StatusTextBlock_.Text = e.Item.Text; } private void MyDrawSurface_DrawComplete(object sender, ESRI.ArcGIS.Clien t.DrawEventArgs args) { GraphicsLayer selectionGraphicslayer = MyMap.Layers["MySelectionGrap hicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics(); QueryTask queryTask = new QueryTask("http://sampleserver1.arcgisonli ne.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5"); queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted; queryTask.Failed += QueryTask_Failed; // Bind data grid to query results Binding resultFeaturesBinding = new Binding("LastResult.Features"); resultFeaturesBinding.Source = queryTask; QueryDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, result FeaturesBinding); Query query = new ESRI.ArcGIS.Client.Tasks.Query(); // Specify fields to return from query query.OutFields.AddRange(new string[] { "STATE_NAME", "SUB_REGION", "STATE_FIPS", "STATE_ABBR", "POP2000", "POP2007" }); query.Geometry = args.Geometry; // Return geometry with result features query.ReturnGeometry = true; query.OutSpatialReference = MyMap.SpatialReference; queryTask.ExecuteAsync(query); } private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Clien t.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features returned from query"); return; } GraphicsLayer graphicsLayer = MyMap.Layers["MySelectionGraphicsLayer "] as GraphicsLayer; if (featureSet != null && featureSet.Features.Count > 0) { foreach (Graphic feature in featureSet.Features) { feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] a s FillSymbol; graphicsLayer.Graphics.Insert(0, feature); } ResultsDisplay.Visibility = Visibility.Visible;

} MyDrawSurface.IsEnabled = false; } private void QueryTask_Failed(object sender, TaskFailedEventArgs args) { MessageBox.Show("Query failed: " + args.Error); } private void GraphicsLayer_MouseEnter(object sender, GraphicMouseEventAr gs args) { QueryDetailsDataGrid.Focus(); QueryDetailsDataGrid.SelectedItem = args.Graphic; QueryDetailsDataGrid.CurrentColumn = QueryDetailsDataGrid.Column s[0]; QueryDetailsDataGrid.ScrollIntoView(QueryDetailsDataGrid.Selecte dItem, QueryDetailsDataGrid.Columns[0]); } private void GraphicsLayer_MouseLeave(object sender, GraphicMouseEventAr gs args) { QueryDetailsDataGrid.Focus(); QueryDetailsDataGrid.SelectedItem = null; } private void QueryDetailsDataGrid_SelectionChanged(object sender, Select ionChangedEventArgs e) { foreach (Graphic g in e.AddedItems) g.Select(); foreach (Graphic g in e.RemovedItems) g.UnSelect(); } private void QueryDetailsDataGrid_LoadingRow(object sender, DataGridRowE ventArgs e) { e.Row.MouseEnter += Row_MouseEnter; e.Row.MouseLeave += Row_MouseLeave; } void Row_MouseEnter(object sender, MouseEventArgs e) { (((System.Windows.FrameworkElement)(sender)).DataContext as Graphic) .Select(); } void Row_MouseLeave(object sender, MouseEventArgs e) { DataGridRow row = sender as DataGridRow; Graphic g = ((System.Windows.FrameworkElement)(sender)).DataContext as Graphic; if (!QueryDetailsDataGrid.SelectedItems.Contains(g)) g.UnSelect(); } }

You might also like