原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件

先看效果图,然后上代码:

<UserControl x:Class="MapClient.PicMusic"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"mc:Ignorable="d"d:DesignHeight="250" d:DesignWidth="300"><Grid x:Name="LayoutRoot" Background="White" HorizontalAlignment="Left" Width="300" Height="250" VerticalAlignment="Top"><Border Margin="0" BorderBrush="#FF95C8F7" BorderThickness="1" CornerRadius="8"><Border.Background><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="White" Offset="0"/><GradientStop Color="#FFBBD7EF" Offset="0.194"/></LinearGradientBrush></Border.Background><Border BorderBrush="#FF95C8F7" BorderThickness="1" Margin="7,31,7,7" Background="White"><Grid Margin="-5,-26,-11,-8"><Grid.RowDefinitions><RowDefinition Height="0.096*"/><RowDefinition Height="0.904*"/></Grid.RowDefinitions><Border Margin="6,4,13,96" Grid.Row="1" BorderThickness="0.5"><Border Margin="30,0"><Border.Background><ImageBrush Stretch="Fill" ImageSource="Images/bg.png"/></Border.Background><Image x:Name="gcImg" Margin="8,5"/></Border></Border><Grid Height="86" Margin="0" Grid.Row="1" VerticalAlignment="Bottom"><ScrollViewer Margin="6,-9,12,9" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="0.5"><TextBlock x:Name="tbSKShortMes" TextWrapping="Wrap" Text="这里是水库的详细信息介绍内容" FontSize="14.667" FontFamily="Microsoft YaHei" Height="76" Width="276" HorizontalAlignment="Center" VerticalAlignment="Center" /></ScrollViewer></Grid><StackPanel HorizontalAlignment="Right" Width="91" Orientation="Horizontal" Margin="0,-4,13,4"><Image x:Name="imgStart"  HorizontalAlignment="Left" Height="25" Margin="3,0,5,-5" Width="22" Source="Images/button_grey_play.png" MouseLeftButtonDown="imgStart_MouseLeftButtonDown" MouseLeftButtonUp="imgStart_MouseLeftButtonUp" ToolTipService.ToolTip="播放" Cursor="Hand"/><Image x:Name="imgPause" HorizontalAlignment="Left" Height="25" Margin="5,0,5,-5" Width="22" Source="Images/button_grey_pause.png" MouseLeftButtonDown="imgPause_MouseLeftButtonDown" MouseLeftButtonUp="imgPause_MouseLeftButtonUp" ToolTipService.ToolTip="暂停" Cursor="Hand"/><Image x:Name="imgEnd" HorizontalAlignment="Left" Height="25" Margin="5,0,0,-5" Width="22" Source="Images/button_grey_stop.png" MouseLeftButtonDown="imgEnd_MouseLeftButtonDown" MouseLeftButtonUp="imgEnd_MouseLeftButtonUp" ToolTipService.ToolTip="停止" Cursor="Hand"/></StackPanel><TextBlock x:Name="gcNM" Margin="105,0,129,3" TextWrapping="Wrap" Text="东风水库" FontWeight="Bold" Cursor="Hand" FontSize="14.667" FontFamily="Microsoft YaHei" Foreground="#FF0056FF" d:LayoutOverrides="Width, Height"/><MediaElement x:Name="media" HorizontalAlignment="Right" Margin="0,0,104,3" Width="21"/></Grid></Border></Border></Grid>
</UserControl>using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Text;
using System.Windows.Controls.Primitives;
using System.Windows.Media.Imaging;
using MapClient.ServiceReference1;
using System.Collections.ObjectModel;namespace MapClient
{public partial class PicMusic : UserControl{SK sk; //水库HL hl; //河流PGZ pgz; //排灌站DF df; //堤防SZ sz; //水闸PWK pwk; //排污口GSZ gsz; //供水站string l_name;string l_Id;string l_type;public PicMusic(){InitializeComponent();}#region 通用方法,只需要更改Show,在实例化窗体的时候,传入不同的参数即可private Point _location;private bool _isShowing;private Popup _popup;private Grid _grid;private Canvas _canvas;private FrameworkElement _content;//初始化并显示弹出窗体.公共方法在显示菜单项时调用public void Show(Point location, string name, string Id, string type){this.l_name = name;this.l_Id = Id;this.l_type = type;/***************2013-05-22**************************/this.gcNM.Text = name; //显示工程名称if (_isShowing)throw new InvalidOperationException();_isShowing = true;_location = location;ConstructPopup(this);_popup.IsOpen = true;//处理标题的间距问题string tmp = name;StringBuilder sb = new StringBuilder();for (int i = 0; i < tmp.Length; i++){sb.Append(tmp[i] + " ");}getDataSoapClient client = new getDataSoapClient();client.getGCMediaByIdCompleted += new EventHandler<getGCMediaByIdCompletedEventArgs>(client_getGCMediaByIdCompleted);client.getGCMediaByIdAsync(Id, type);}void client_getGCMediaByIdCompleted(object sender, getGCMediaByIdCompletedEventArgs e){try{ObservableCollection<tb_GCMEDIA> lists = e.Result;if (lists.Count > 0){foreach (tb_GCMEDIA item in lists){//工程名称this.gcNM.Text = item.GCNM.Trim();string[] s = { "ClientBin" };//音频MP3文件string urlM = App.Current.Host.Source.OriginalString.ToString().Split(s, StringSplitOptions.RemoveEmptyEntries)[0] + item.MP3URL.ToString().Trim(new char[] { '.', '/' });this.media.Source = new Uri(urlM, UriKind.RelativeOrAbsolute);//图片文件string urlA = App.Current.Host.Source.OriginalString.ToString().Split(s, StringSplitOptions.RemoveEmptyEntries)[0] + item.PICURL.ToString().Trim(new char[] { '.', '/' });Uri uri = new Uri(urlA, UriKind.RelativeOrAbsolute);BitmapImage image = new BitmapImage(uri);this.gcImg.Source = image;//工程简要说明this.tbSKShortMes.Text = item.MEMO;}}else{this.media.Source = new Uri("sound.mp3", UriKind.Relative); //音频资料Uri uri = new Uri("Images/noPic.jpg", UriKind.Relative);BitmapImage image = new BitmapImage(uri);this.gcImg.Source = image; //工程图片this.tbSKShortMes.Text = "暂无资料,请上传!"; //工程简要说明}}catch (Exception){this.media.Source = new Uri("sound.mp3", UriKind.Relative); //音频资料Uri uri = new Uri("Images/noPic.jpg", UriKind.Relative);BitmapImage image = new BitmapImage(uri);this.gcImg.Source = image; //工程图片this.tbSKShortMes.Text = "暂无资料,请上传!"; //工程简要说明}}public void Show(Point location){if (_isShowing)throw new InvalidOperationException();_isShowing = true;_location = location;ConstructPopup(this);_popup.IsOpen = true;}//关闭弹出窗体public void Close(){_isShowing = false;if (_popup != null){_popup.IsOpen = false;}}//弹出框外面点击则关闭该窗口protected virtual void OnClickOutside(){Close();}// 用Grid来布局,初始化弹出窗体//在Grid里面添加一个Canvas,用来监测菜单项外面的鼠标点击事件private void ConstructPopup(FrameworkElement _element){if (_popup != null)return;_popup = new Popup();_grid = new Grid();_popup.Child = _grid;_canvas = new Canvas();_canvas.MouseLeftButtonDown += (sender, args) => { OnClickOutside(); };_canvas.MouseRightButtonDown += (sender, args) => { args.Handled = true; OnClickOutside(); };_canvas.Background = new SolidColorBrush(Colors.Transparent);_grid.Children.Add(_canvas);_content = _element;_content.HorizontalAlignment = HorizontalAlignment.Left;_content.VerticalAlignment = VerticalAlignment.Top;_content.Margin = new Thickness(_location.X, _location.Y, 0, 0);_grid.Children.Add(_content);UpdateSize();}/// <summary>/// 更新大小/// </summary>private void UpdateSize(){_grid.Width = Application.Current.Host.Content.ActualWidth;_grid.Height = Application.Current.Host.Content.ActualHeight;if (_canvas != null){_canvas.Width = _grid.Width;_canvas.Height = _grid.Height;}}#endregion#region WebService 调用方法及关闭窗体方法public void closeWindow(SK mp){mp.LayoutRoot.Children.RemoveAt(mp.LayoutRoot.Children.Count - 1);}public void closeWindow(HL mp){mp.LayoutRoot.Children.RemoveAt(mp.LayoutRoot.Children.Count - 1);}public void closeWindow(DF mp){mp.LayoutRoot.Children.RemoveAt(mp.LayoutRoot.Children.Count - 1);}public void closeWindow(PGZ mp){mp.LayoutRoot.Children.RemoveAt(mp.LayoutRoot.Children.Count - 1);}public void closeWindow(GSZ mp){mp.LayoutRoot.Children.RemoveAt(mp.LayoutRoot.Children.Count - 1);}public void closeWindow(PWK mp){mp.LayoutRoot.Children.RemoveAt(mp.LayoutRoot.Children.Count - 1);}public void closeWindow(SZ mp){mp.LayoutRoot.Children.RemoveAt(mp.LayoutRoot.Children.Count - 1);}private void imgStart_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e){// 在此处添加事件处理程序实现。e.Handled = true;Uri uri = new Uri("Images/button_blue_play.png", UriKind.Relative);BitmapImage image = new BitmapImage(uri);this.imgStart.Source = image;//其他变成灰色图案uri = new Uri("Images/button_grey_pause.png", UriKind.Relative);BitmapImage image2 = new BitmapImage(uri);this.imgPause.Source = image2;uri = new Uri("Images/button_grey_stop.png", UriKind.Relative);BitmapImage image3 = new BitmapImage(uri);this.imgEnd.Source = image3;}private void imgStart_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e){// 在此处添加事件处理程序实现。this.media.Play();}private void imgPause_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e){// 在此处添加事件处理程序实现。e.Handled = true;Uri uri = new Uri("Images/button_blue_pause.png", UriKind.Relative);BitmapImage image = new BitmapImage(uri);this.imgPause.Source = image;//其他变成灰色图案uri = new Uri("Images/button_grey_play.png", UriKind.Relative);BitmapImage image2 = new BitmapImage(uri);this.imgStart.Source = image2;uri = new Uri("Images/button_grey_stop.png", UriKind.Relative);BitmapImage image3 = new BitmapImage(uri);this.imgEnd.Source = image3;}private void imgPause_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e){// 在此处添加事件处理程序实现。this.media.Pause();}private void imgEnd_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e){// 在此处添加事件处理程序实现。e.Handled = true;Uri uri = new Uri("Images/button_blue_stop.png", UriKind.Relative);BitmapImage image = new BitmapImage(uri);this.imgEnd.Source = image;//其他变成灰色图案uri = new Uri("Images/button_grey_pause.png", UriKind.Relative);BitmapImage image2 = new BitmapImage(uri);this.imgPause.Source = image2;uri = new Uri("Images/button_grey_play.png", UriKind.Relative);BitmapImage image3 = new BitmapImage(uri);this.imgStart.Source = image3;}private void imgEnd_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e){// 在此处添加事件处理程序实现。this.media.Stop();}#endregion}
}/// <summary>/// 排灌站列表聚焦/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void dgPGZList_SelectionChanged(object sender, SelectionChangedEventArgs e){ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();// 高亮和选中行相关的地图元素DataGrid dataGrid = sender as DataGrid;int selectedIndex = dataGrid.SelectedIndex;if (selectedIndex > -1){tb_PGZ findResult = (tb_PGZ)dgPGZList.SelectedItem; //获取DataGrid的选中行,该DataGrid是数据的DataGrid的Name属性值Graphic g = new Graphic(){Geometry = mercator.FromGeographic(new MapPoint(double.Parse(findResult.Latitute.ToString().Trim()), double.Parse(findResult.Longitute.ToString().Trim()))),Symbol = LayoutRoot.Resources["DefaultMarkerSymbol"] as Symbol};//保存属性g.Attributes["Latitute"] = findResult.Latitute; //纬度g.Attributes["Longitute"] = findResult.Longitute; //经度g.Attributes["NM"] = findResult.BZNM; //名称g.Attributes["ID"] = findResult.ID;//序号ESRI.ArcGIS.Client.Geometry.Envelope selectedFeatureExtent = mercator.ToGeographic(g.Geometry).Extent; //选中点的位置double expandPercentage = 1;//加数值后,聚焦(这里需要注意,进行地理坐标和墨卡托坐标的转换)double widthExpand = (selectedFeatureExtent.Width + 5) * (expandPercentage / 100);double heightExpand = (selectedFeatureExtent.Height + 5) * (expandPercentage / 100);ESRI.ArcGIS.Client.Geometry.Envelope displayExtent = new Envelope(WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMin - (widthExpand / 2), selectedFeatureExtent.YMin - (heightExpand / 2))), WKIDConvert.lonlat2mercator(new MapPoint(selectedFeatureExtent.XMax + (widthExpand / 2), selectedFeatureExtent.YMax + (heightExpand / 2)))){SpatialReference = new SpatialReference(102100)};try{//聚焦myMap.ZoomTo(displayExtent);ShowFocus(g);}catch (Exception){}//聚焦之后,将DataGrid中被选中记录的选中状态置空dataGrid.SelectedIndex = -1;//聚焦是加载到SL中间显示并自动添加Tip信息GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual as UIElement);double x = Browser.ClientWidth;double y = Browser.ClientHeight;Point offset = gt.Transform(new Point(x / 2, y / 2));double controlTop = offset.Y - 125;double controlLeft = offset.X - 300;Point p = new Point(controlLeft, controlTop);tip_Base.g_PicMusic = new PicMusic();tip_Base.g_PicMusic.Show(p, g.Attributes["NM"].ToString(), g.Attributes["ID"].ToString(), "4");}else{//不进行任何处理}}

ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件...相关推荐

  1. arcgis for js 4.X自定义气泡点击地图对象弹出对话框

    题目的意思是,arcgis for js 4.X自定义气泡,点击地图对象弹出对话框,而不是弹出气泡.对话框是vue页面组成的自定义对话框,不是地图页面的对象. 基本思路: 1)气泡模板(PopupTe ...

  2. ArcGIS API for JS4.7加载FeatureLayer,点击弹出信息并高亮显示

    我加载的是ArcGIS Server本地发布的FeatureService,ArcGIS API for JS4.7记载FeatureLayer时,在二维需要通过代码启用WebGL渲染,在三维模式下, ...

  3. ArcGIS API for Silverlight 实现修改地图上的工程点位置

    ArcGIS API for Silverlight 实现修改地图上的工程点位置 原文:ArcGIS API for Silverlight 实现修改地图上的工程点位置 #region 处理工程点点击 ...

  4. ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

    ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发 ...

  5. ArcGIS API for Silverlight开发入门

    ArcGIS API for Silverlight开发入门 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都 ...

  6. ArcGIS API for Silverlight 点沿着线流动

    原文:ArcGIS API for Silverlight 点沿着线流动 概述 前段时间做了一个项目,要求是有一些电力输送线,电力输送线或者石油管道都是有流动方向的,用户想做一个动态效果来模拟电力的输 ...

  7. ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题

    ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题 原文:ArcGIS API for Silverlight地图加载众多点时,使用Cluster ...

  8. ArcGIS API for Silverlight中legend控件显示图例问题

    转自http://www.gisall.com/html/34/9534-5141.html 在使用ArcGIS API for Silverlight进行地图展示应用的时候,我们都会设置地图图层列表 ...

  9. ArcGIS API for Silverlight 学习笔记(1)

    学习ArGIS API for Silverlight时间不久,希望记录下自己的心得. ArcGIS API for Microsoft Silverlight在今年三月份发布了1.2版本,它的最新版 ...

最新文章

  1. StringUtils.isEmpty和StringUtils.isBlank的区别
  2. 费曼:所有科学知识都是不确定的
  3. 我可以从iOS DeviceSupport中删除数据吗?
  4. CISCO路由器、交换机密码破解
  5. python 进程池_Python实践17-进程池
  6. JDK8中的新特性——函数式接口
  7. asp生成和导出excel和word数据源码和代码,简单好用(已经测试可以用)
  8. Linux about MySQL
  9. GandCrab勒索病毒
  10. 社区团购小程序开发安装教程(基于yii框架+PHP)
  11. 【历史上的今天】1 月 31 日:Python 之父出生;宏碁大战联想;SBC 收购 ATT
  12. 如何进行网站代备案?
  13. 对接支付宝App支付接口详解
  14. 对算法的时间复杂度的理解
  15. 2009年8月8号日志
  16. 飞冰(ICE) 阿里家的前端图形化一键工具
  17. 【Android】玩转命令行工具-apkanalyzer
  18. A. Double Cola
  19. Mysql中的回表查询
  20. 【Metashape精品教程3】坐标系选择 坐标转换

热门文章

  1. 理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换
  2. Oracle数据库的轻松干净卸载
  3. SppNet 多尺度训练
  4. 傅里叶变化的本质:复数的实部和虚部的对应关系
  5. 向量空间和计算机科学与技术,向量空间
  6. python速度比较_Python和C运算速度对比实测
  7. 电脑只有一个c盘怎么办_电脑的C盘快满了怎么办
  8. win8如何卸载mysql5.0_Win8如何卸载Windows的服务?卸载Windows的服务的方法和步骤
  9. Zabbix添加客户端步骤
  10. midi api java_Java声音api – 扫描MIDI设备