using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Browser;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Markup;
using System.Windows.Shapes;
using System.ComponentModel;
using ESRI.ArcGIS.Client;
using System.Windows.Controls.Primitives;
namespace ESRIStandardMapApplication1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void myMenuItem1_Click(object sender, RoutedEventArgs e)
{
// The myArcGISDynamicMapServiceLayer (an ArcGISDynamicServiceLayer object) and TextBlock_LayerDefinitions
// (a TextBlock object) were defined previously in the XAML or code-behind.
// Get the layer in the LayerInfo collection.
ArcGISDynamicMapServiceLayer myArcGISDynamicMapServiceLayer = (ArcGISDynamicMapServiceLayer)Map.Layers[1];
// LayerDefinition (Read/Write)
// This is how to set (i.e. Write) a LayerDefinition.
// --------------------------------------------------
// Set the .LayerDefinition for the .LayerID = 0 (the Earthquakes1970 layer). By default no LayerDefinition
// is set unless explicitly set on the server.
ESRI.ArcGIS.Client.LayerDefinition myDefinition = new ESRI.ArcGIS.Client.LayerDefinition();
myDefinition.LayerID = 0;
// The Definition only displays earth quakes that have an Magnitude greater than 6.
// The field Magnitude is of type esriFieldTypeDouble.
myDefinition.Definition = "Magnitude > 6";
// Another example where the Name of the earth quake event is to contains the letters 'CHINA'.
// Note: the Definition is case sensitive. The field Name is of type esriFieldTypeString.
//myDefinition.Definition = "Name LIKE 'CHINA'";
// Another example where the Name of the earth quake event is exactly matches the letters 'VENEZUELA'.
// Note: the Definition is case sensitive. The field Name is of type esriFieldTypeString.
//myDefinition.Definition = "Name = 'VENEZUELA'";
// Another example where the earth quake events are displayed if they occured after January 15, 2008.
// The field Date_ is of type esriFieldTypeDate.
//myDefinition.Definition = "Date_ > DATE '1/15/2008'";
// Create an ObservableCollection and add the .Definition to it.
System.Collections.ObjectModel.ObservableCollection<LayerDefinition> myObservableCollection2 =
new System.Collections.ObjectModel.ObservableCollection<LayerDefinition>();
myObservableCollection2.Add(myDefinition);
// Apply the custom LayerDefinition
myArcGISDynamicMapServiceLayer.LayerDefinitions = myObservableCollection2;
myArcGISDynamicMapServiceLayer.Refresh();
}
private void myMenuItem2_Click(object sender, RoutedEventArgs e)
{
// The myArcGISDynamicMapServiceLayer (an ArcGISDynamicServiceLayer object) and TextBlock_LayerDefinitions
// (a TextBlock object) were defined previously in the XAML or code-behind.
// Get the layer in the LayerInfo collection.
ArcGISDynamicMapServiceLayer myArcGISDynamicMapServiceLayer = (ArcGISDynamicMapServiceLayer)Map.Layers[1];
// LayerDefinition (Read/Write)
// This is how to set (i.e. Write) a LayerDefinition.
// --------------------------------------------------
// Set the .LayerDefinition for the .LayerID = 0 (the Earthquakes1970 layer). By default no LayerDefinition
// is set unless explicitly set on the server.
ESRI.ArcGIS.Client.LayerDefinition myDefinition = new ESRI.ArcGIS.Client.LayerDefinition();
myDefinition.LayerID = 0;
// The Definition only displays earth quakes that have an Magnitude greater than 6.
// The field Magnitude is of type esriFieldTypeDouble.
myDefinition.Definition = "Name = 'VENEZUELA'";
// Another example where the Name of the earth quake event is to contains the letters 'CHINA'.
// Note: the Definition is case sensitive. The field Name is of type esriFieldTypeString.
//myDefinition.Definition = "Name LIKE 'CHINA'";
// Another example where the Name of the earth quake event is exactly matches the letters 'VENEZUELA'.
// Note: the Definition is case sensitive. The field Name is of type esriFieldTypeString.
//myDefinition.Definition = "Name = 'VENEZUELA'";
// Another example where the earth quake events are displayed if they occured after January 15, 2008.
// The field Date_ is of type esriFieldTypeDate.
//myDefinition.Definition = "Date_ > DATE '1/15/2008'";
// Create an ObservableCollection and add the .Definition to it.
System.Collections.ObjectModel.ObservableCollection<LayerDefinition> myObservableCollection2 =
new System.Collections.ObjectModel.ObservableCollection<LayerDefinition>();
myObservableCollection2.Add(myDefinition);
// Apply the custom LayerDefinition
myArcGISDynamicMapServiceLayer.LayerDefinitions = myObservableCollection2;
myArcGISDynamicMapServiceLayer.Refresh();
}
void ReadLayerDefs()
{
// This is how to get (i.e. Read) a LayerDefiniton.
// The TextBlock_LayerDefinitions (a TextBlock object) was previously set in XAML or code-behind.
// ----------------------------------------------------------------------------------------------
// Get the existing LayerDefinitions collection.
ArcGISDynamicMapServiceLayer myArcGISDynamicMapServiceLayer = (ArcGISDynamicMapServiceLayer)Map.Layers[1];
System.Collections.ObjectModel.ObservableCollection<LayerDefinition> myObservableCollection =
myArcGISDynamicMapServiceLayer.LayerDefinitions;
if (myObservableCollection.Count > 0)
{
// Get the first LayerDefinition
ESRI.ArcGIS.Client.LayerDefinition myLayerDefinition = myObservableCollection[0];
// Display some textual information about the LayerDefinition.
MessageBox.Show("For Layer: " + myLayerDefinition.LayerID.ToString() + ". The Defintion is: " + myLayerDefinition.Definition);
}
else
{
MessageBox.Show("[NO LayerDefinitions SET]");
}
}
private void myMenuItem3_Click(object sender, RoutedEventArgs e)
{
// Get the layer in the LayerInfo collection.
ArcGISDynamicMapServiceLayer myArcGISDynamicMapServiceLayer = (ArcGISDynamicMapServiceLayer)Map.Layers[1];
// Create an ObservableCollection and add the .Definition to it.
System.Collections.ObjectModel.ObservableCollection<LayerDefinition> myObservableCollection2 =
new System.Collections.ObjectModel.ObservableCollection<LayerDefinition>();
// myObservableCollection2.Add(myDefinition);
// Apply the custom LayerDefinition
myArcGISDynamicMapServiceLayer.LayerDefinitions = myObservableCollection2;
myArcGISDynamicMapServiceLayer.Refresh();
}
}
}
<UserControl x:Class="ESRIStandardMapApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:esri="http://schemas.esri.com/arcgis/client/2009"
mc:Ignorable="d" d:DesignWidth="780" d:DesignHeight="480"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
xmlns:userControls="clr-namespace:ESRI.ArcGIS.SilverlightMapApp"
xmlns:actions="clr-namespace:ESRI.ArcGIS.SilverlightMapApp.Actions">
<Grid x:Name="LayoutRoot">
<!-- Map Control -->
<esri:Map x:Name="Map" Background="White">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<ei:ChangePropertyAction TargetName="myMenuItems" PropertyName="Visibility">
<ei:ChangePropertyAction.Value>
<Visibility>Collapsed</Visibility>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<esri:ArcGISTiledMapServiceLayer ID="BaseLayer"
Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
<esri:ArcGISDynamicMapServiceLayer Url="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Earthquakes/Since_1970/MapServer">
<esri:ArcGISDynamicMapServiceLayer.LayerDefinitions>
<!-- LayerID="0" is the Earthquakes1970 layer. The Definition only displays earth quakes that have an
Magnitude greater than 6. The field Magnitude is of type esriFieldTypeDouble. -->
<!-- <esri:LayerDefinition LayerID="0" Definition="Magnitude > 6" /> -->
<!-- Another example where the Name of the earth quake event is to contains the letters 'CHINA'.
Note: the Definition is case sensitive. The field Name is of type esriFieldTypeString. -->
<!-- <esri:LayerDefinition LayerID="0" Definition="Name LIKE 'CHINA'" /> -->
<!-- Another example where the Name of the earth quake event is exactly matches the letters 'VENEZUELA'.
Note: the Definition is case sensitive. The field Name is of type esriFieldTypeString. -->
<!-- <esri:LayerDefinition LayerID="0" Definition="Name = 'VENEZUELA'" /> -->
<!-- Another example where the earth quake events are displayed if they occured after January 15, 2008.
The field Date_ is of type esriFieldTypeDate. -->
<!-- <esri:LayerDefinition LayerID="0" Definition="Date_ > DATE '1/15/2008'" />-->
</esri:ArcGISDynamicMapServiceLayer.LayerDefinitions>
</esri:ArcGISDynamicMapServiceLayer>
<!--<esri:ArcGISDynamicMapServiceLayer ID="Base Map"
Url="http://ccmcd-gis/ArcGIS/rest/services/Citrus_Base/MapServer" />-->
</esri:Map>
<!-- Main Menu -->
<Grid HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10" >
<userControls:CollapsiblePanel x:Name="MainManu" IsExpanded="True"
RenderTransformOrigin="0,0"
VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<Border Style="{StaticResource CommonBorder}">
<StackPanel Margin="3">
<Grid x:Name="BannerGrid" Grid.Row="0" Margin="30,0">
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="3" />
<RowDefinition Height="17" />
</Grid.RowDefinitions>
<!-- Application Title -->
<TextBlock x:Name="title" Margin="0,0,15,0" Style="{StaticResource Title}"
Text="{StaticResource ApplicationTitle}" Grid.Row="0" />
<Rectangle x:Name="separatorBar" Fill="CornflowerBlue" Grid.Row="1" />
<!-- Application Subtitle -->
<TextBlock x:Name="subtitle" Style="{StaticResource Subtitle}"
Text="{StaticResource ApplicationSubtitle}" Grid.Row="2" />
</Grid>
<Canvas HorizontalAlignment="Left" Height="25" Width="Auto"
VerticalAlignment="Bottom" Margin="10,10,10,-5">
<StackPanel Orientation="Horizontal">
<Button x:Name="myMenu" Style="{StaticResource MenuButton}"
ToolTipService.ToolTip="Menu">
<Button.Content>
<Image Source="Images/i_globe.png" Stretch="Fill" />
</Button.Content>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<ei:ChangePropertyAction TargetName="myMenuItems" PropertyName="Visibility">
<ei:ChangePropertyAction.Value>
<Visibility>Visible</Visibility>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button x:Name="btnAbout" Style="{StaticResource MenuButton}"
ToolTipService.ToolTip="About ESRI ArcGIS Mapping Application">
<Button.Content>
<Image Source="Images/i_about.png" Stretch="Fill" />
</Button.Content>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<ei:ChangePropertyAction TargetName="myMenuItems" PropertyName="Visibility">
<ei:ChangePropertyAction.Value>
<Visibility>Collapsed</Visibility>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
<i:EventTrigger EventName="Click">
<actions:ToggleVisibilityAction TargetName="AboutWindow" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Canvas>
</StackPanel>
</Border>
</userControls:CollapsiblePanel>
<Image Source="Images/logo.png" HorizontalAlignment="Left" VerticalAlignment="Top"
Stretch="Fill" Height="40" Width="40" Margin="-10"
ToolTipService.ToolTip="Expand/Collapse Menu Bar">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<actions:ToggleCollapseAction TargetName="MainManu" />
</i:EventTrigger>
<i:EventTrigger EventName="MouseLeftButtonDown">
<ei:ChangePropertyAction TargetName="myMenuItems" PropertyName="Visibility">
<ei:ChangePropertyAction.Value>
<Visibility>Collapsed</Visibility>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
</Grid>
<!-- The SubMenus -->
<Grid x:Name="myMenuItems" HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="30,112">
<Border Style="{StaticResource CommonBorder}" Padding="10,3,10,3">
<StackPanel>
<Button x:Name="myMenuItem1"
Style="{StaticResource MenuItem}"
ToolTipService.ToolTip="Your First Menu Here!" Content="LayerDef 1" Click="myMenuItem1_Click" />
<Button x:Name="myMenuItem2"
Style="{StaticResource MenuItem}"
ToolTipService.ToolTip="Your Second Menu Here!"
Content="LayerDef 2" Click="myMenuItem2_Click" />
<Button x:Name="myMenuItem3"
Style="{StaticResource MenuItem}"
ToolTipService.ToolTip="Your Third Menu Here!"
Content="Clear LayerDef" Click="myMenuItem3_Click" />
</StackPanel>
</Border>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeave">
<ei:ChangePropertyAction TargetName="myMenuItems" PropertyName="Visibility">
<ei:ChangePropertyAction.Value>
<Visibility>Collapsed</Visibility>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
<i:EventTrigger EventName="Loaded">
<ei:ChangePropertyAction TargetName="myMenuItems" PropertyName="Visibility">
<ei:ChangePropertyAction.Value>
<Visibility>Collapsed</Visibility>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</Grid>
<!-- StackPanel containing the Base Map Switcher and the Application Toolbar -->
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Right" Margin="0,5,5,0" VerticalAlignment="Top" >
<!-- Base Map Switcher -->
<Border x:Name="BaseMapSwitcher" Style="{StaticResource CommonBorder}" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="5">
<StackPanel Orientation="Horizontal" Margin="5">
<RadioButton Content="Streets" IsChecked="True"
ToolTipService.ToolTip="Worldwide Street Map"
GroupName="BaseLayer"
Margin="5,0,0,0" Foreground="White" FontSize="11" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<actions:SetLayerUrlAction TargetName="Map" LayerID="BaseLayer" Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</RadioButton>
<RadioButton Content="Topo"
GroupName="BaseLayer"
ToolTipService.ToolTip="United States Topographic Map"
Margin="5,0,0,0" Foreground="White" FontSize="11" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<actions:SetLayerUrlAction TargetName="Map" LayerID="BaseLayer" Url="http://services.arcgisonline.com/ArcGIS/rest/services/USA_Topo_Maps/MapServer"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</RadioButton>
<RadioButton Content="Imagery"
ToolTipService.ToolTip="Worldwide Satellite Imagery Map"
GroupName="BaseLayer"
Margin="5,0,0,0" Foreground="White" FontSize="11" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<actions:SetLayerUrlAction TargetName="Map" LayerID="BaseLayer" Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</RadioButton>
</StackPanel>
</Border>
<!-- Toolbar -->
<Grid Margin="5">
<userControls:CollapsiblePanel x:Name="MainToolbar" IsExpanded="True"
RenderTransformOrigin="1,0"
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch" Margin="0,0,5,0">
<Grid HorizontalAlignment="Left" Effect="{StaticResource dropShadow}">
<Border Style="{StaticResource CommonBorder}" Margin="0,0,0,18" Effect="{x:Null}" />
<StackPanel Orientation="Horizontal" Margin="0,7,15,0">
<Button x:Name="btnToggleBaseMapSwitcher" Style="{StaticResource ToolbarButton}"
ToolTipService.ToolTip="Toggle visibility of the base map switcher">
<Button.Content>
<Image Source="Images/i_clickglobe.png" Stretch="Fill" />
</Button.Content>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<actions:ToggleVisibilityAction TargetName="BaseMapSwitcher" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button x:Name="btnToggleOverviewMap" Style="{StaticResource ToolbarButton}"
ToolTipService.ToolTip="Toggle visibility of the overview map">
<Button.Content>
<Image Source="Images/i_overview.png" Stretch="Fill" />
</Button.Content>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<actions:ToggleVisibilityAction TargetName="OverviewMapPanel" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button x:Name="btnToggleMagnifyingGlass" Style="{StaticResource ToolbarButton}"
ToolTipService.ToolTip="Toggle visibility of the magnifying glass">
<Button.Content>
<Image Source="Images/i_magnifyglass.png" Stretch="Fill" />
</Button.Content>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<actions:ToggleVisibilityAction TargetName="MagnifyingGlass" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Grid>
</userControls:CollapsiblePanel>
<Image Source="Images/i_tools.png" HorizontalAlignment="Right"
VerticalAlignment="Top" Stretch="Fill" Height="30" Width="30" Margin="-5"
ToolTipService.ToolTip="Expand/Collapse Toolbar">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<actions:ToggleCollapseAction TargetName="MainToolbar" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
</Grid>
</StackPanel>
<!-- Navigator -->
<esri:Navigation x:Name="Navigator" HorizontalAlignment="Left" VerticalAlignment="Bottom"
Margin="40,0,0,30"
Map="{Binding ElementName=Map}" />
<!-- Scale Bar -->
<userControls:ScaleBar x:Name="ScaleBar" MapUnit="Meters" Map="{Binding ElementName=Map}" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="20,0,0,10" />
<!-- Overview Map Window -->
<userControls:WindowPanel x:Name="OverviewMapPanel" Width="212" Height="231"
VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,89,10,0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<ei:ChangePropertyAction PropertyName="Visibility">
<ei:ChangePropertyAction.Value>
<Visibility>Collapsed</Visibility>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<esri:OverviewMap x:Name="OVMap" Margin="0"
Map="{Binding ElementName=Map}">
<esri:OverviewMap.Layer>
<esri:ArcGISTiledMapServiceLayer Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
</esri:OverviewMap.Layer>
</esri:OverviewMap>
<userControls:WindowPanel.ContentTitle>
<StackPanel Orientation="Horizontal">
<Image Source="Images/i_overview.png"
HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="Fill"
Width="20" Height="20" Margin="5,2,0,0" />
<TextBlock Foreground="White" FontSize="12"
Text="Overview Map" Width="100" TextWrapping="NoWrap" Height="Auto"
HorizontalAlignment="Left" Margin="5,3,0,0" />
</StackPanel>
</userControls:WindowPanel.ContentTitle>
</userControls:WindowPanel>
<!-- Magnifying Glass -->
<esri:MagnifyingGlass x:Name="MagnifyingGlass" HorizontalAlignment="Left" VerticalAlignment="Top"
Map="{Binding ElementName=Map}" Margin="50,150,0,0" Visibility="Collapsed">
<esri:MagnifyingGlass.Layer>
<esri:ArcGISTiledMapServiceLayer Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" />
</esri:MagnifyingGlass.Layer>
</esri:MagnifyingGlass>
<!-- About Window -->
<userControls:WindowPanel x:Name="AboutWindow" Width="375" Height="150" Visibility="Collapsed" Effect="{StaticResource dropShadow}"
Background="{StaticResource CommonBackgroundBrush}"
VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<StackPanel Orientation="Vertical">
<TextBlock Style="{StaticResource Title}" TextWrapping="NoWrap"
Text="{StaticResource ApplicationTitle}" Width="Auto" Height="Auto"
Margin="5,3,0,0" />
<TextBlock Style="{StaticResource Subtitle}" TextWrapping="NoWrap"
Text="{StaticResource ApplicationSubtitle}" Width="Auto" Height="Auto"
Margin="5,1,0,0" />
<Line X1="5" Y1="50" X2="355" Y2="50" Stroke="White" StrokeThickness="0.25" />
<TextBlock Foreground="Yellow" FontSize="11" Width="Auto" TextWrapping="NoWrap"
Text="{StaticResource ApplicationInfo}" Height="Auto"
HorizontalAlignment="Left" Margin="5,3,0,0" />
</StackPanel>
<userControls:WindowPanel.ContentTitle>
<StackPanel Orientation="Horizontal">
<Image Source="Images/logo.png"
HorizontalAlignment="Left" VerticalAlignment="Top" Stretch="Fill"
Width="20" Height="20" Margin="5,2,0,0" />
<TextBlock Foreground="White" FontSize="12"
Text="About" Width="100" TextWrapping="NoWrap" Height="Auto"
HorizontalAlignment="Left" Margin="5,3,0,0" />
</StackPanel>
</userControls:WindowPanel.ContentTitle>
</userControls:WindowPanel>
</Grid>
</UserControl>