<!-- Base Map Style --> <Style x:Key="BaseMapStyle" TargetType="esri:Map"> <Setter Property="IsLogoVisible" Value="False" /> <Setter Property="Background" Value="{x:Null}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Grid Background="{TemplateBinding Background}"> <Grid x:Name="RootElement" Width="Auto" Height="Auto" /> <Rectangle x:Name="ZoomBox" Fill="#55FFFFFF" Stroke="Black" StrokeThickness="2" Visibility="Collapsed" /> <!-- Top Toolbox --> <v:MapToolBoxView /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
<UserControl x:Class="Xyz.Zyx.Shell.Views.MapToolBoxView" 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:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.SL4" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" x:Name="MapToolBoxControl"> <UserControl.DataContext> <Binding Mode="OneWay" Path="MapToolBox" Source="{StaticResource Locator}"/> </UserControl.DataContext> <StackPanel Orientation="Vertical" HorizontalAlignment="Right" VerticalAlignment="Top"> <Button x:Name="SelectionQuery" Content="Info"> <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <cmd:EventToCommand Command="{Binding Path=SelectionInfoCommand, Mode=OneWay}" CommandParameter="{Binding ElementName=MapToolBoxControl}" /> </i:EventTrigger> </i:Interaction.Triggers> </Button> </StackPanel> </UserControl>
[Export] public class MapToolBoxViewModel : BaseViewModel<MapToolBoxViewModel> { private readonly IIdentifyService _identifyService; [ImportingConstructor] public MapToolBoxViewModel(IIdentifyService identifyService) { _identifyService = identifyService; SelectionInfoCommand = new RelayCommand<UIElement>(SetSelectionInfo); } private Draw _selectionDraw; public Draw SelectionDraw { get { return _selectionDraw; } set { if(_selectionDraw == value) return; _selectionDraw = value; InvokeProeprtyChanged(() => SelectionDraw); } } public RelayCommand<UIElement> SelectionInfoCommand { get; private set; } private void SetSelectionInfo(UIElement control) { ClearDrawings(); var map = VizTreeHelper.FindParent<Map>(control); if(map == null) { return; } SelectionDraw = new Draw(map); SelectionDraw.DrawComplete += SelectionDrawComplete; SelectionDraw.DrawMode = DrawMode.Rectangle; SelectionDraw.IsEnabled = true; SelectionDraw.Map.Cursor = Cursors.Stylus; } private void SelectionDrawComplete(object sender, DrawEventArgs e) { var envelope = e.Geometry as Envelope; if(envelope == null) return; var selectionEnvelopeDto = new EnvelopeDto { YMin = envelope.YMin, YMax = envelope.YMax, XMin = envelope.XMin, XMax = envelope.XMax }; Messenger.Default.Send(new SearchableMapLayersRequestMessage(selectionEnvelopeDto, "request", message => { _identifyService.BeginIdentifyFeaturesInSelection(message.SearchableLayers, message.RequestParams.ToEnvelope(), SelectionDraw.Map.Extent, SelectionDraw.Map.ActualWidth, SelectionDraw.Map.ActualHeight, HandleError); ClearDrawings(); })); } private void IdentifyFeatureFaild(Exception exception) { NotifyMessage("Error occurred, try again", NotificationType.Exception, exception, true); } private void ClearDrawings() { if(SelectionDraw == null) return; SelectionDraw.IsEnabled = false; SelectionDraw.Map.Cursor = Cursors.Arrow; SelectionDraw.DrawComplete -= SelectionDrawComplete; SelectionDraw = null; } }
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.