【ArcGIS Pro二次开发】(13):ProWindow的用法
创始人
2025-05-28 08:58:47
0

ProWindow是ArcGIS Pro SDK中的一个WPF控件,具有以下特点:

  1. 可扩展性:ProWindow提供了丰富的API和样式,可以轻松地扩展和自定义ArcGIS Pro应用程序的UI。

  2. 可定制性:ProWindow支持多种UI控件和布局方式,可以创建符合自己需求的UI。

  3. 易用性:ProWindow是一个标准的WPF控件,使用起来非常简单。

总之,使用ProWindow可以轻松地为ArcGIS Pro应用程序添加自定义的用户界面元素,以增强应用程序的功能和易用性。

下面以一个小例子演示ProWindow窗口,Label、Button、Combobox等WPF控件的简单使用方法,同时复习一下图层、字段基本操作等内容。


一、要实现的功能

如上图所示,创建一个ProWindow示例窗口,通过下拉框选择要素图层,或通过按钮打开一个要素类,在第二个下拉框中列出该要素图层的所有字段名,再通过点击显示字段值按钮,在列表框中显示该字段的所有字段值。


二、Pro Window窗口的创建和UI设计

1、Pro Window窗口

在解决方案中右键点添加——新建项,选择:ArcGIS Pro ProWindow,如上图所示。

创建后的新窗口如下,左上是主窗口,是设计的主体。中间是属性栏,在这里可以手动编辑名称、标题、窗体大小、显示文字等属性。最右侧是工具箱窗口,包含默认的所有WPF控件,可以左键直接拖动到主窗口界面,直接创建控件,很方便。

从工具箱直接拖动2个Label控件、2个Button控件、2个ComboBox控件和1个ListBox控件,摆好位置,如下图:

摆控件的时候有一个技巧,就是锁定距离,可以控制和窗口边界或和其它控件的距离,这样窗口被拉伸的时候,也能保持位置,不至于发现形变。

2、Label控件

Label控件很简单,就是个标签,基本不会在它上面创建什么事件,只要注意标签文本内容和字体就行了。

3、Button控件

Button控件主要功能一般就是配一个点击事件,然后处理这个事件即可。如上面所示,在属性栏的事件窗口下,有很多可用的事件,这里用到了Click事件,可以手动输入事件名,再按下【Enter】键,就会在对应的cs文件中添加一个对应名的方法。当然,你直接双击主窗口的控件,也会自动生成并命名事件。

4、ComboBox控件

ComboBox控件是一个下拉框列表,主要的2个属性,【IsEditable】勾选后可以编辑,【Items】可以预先编辑好下拉框里的内容。

它的主要事件是【DropDownOpened】,即点击下拉框,展开列表时触发的事件。

5、Listbox控件

Listbox是1个列表框,主要用来以列表的方式展示内容。一般不涉及事件触发。


三、功能实现流程

之前自动创建的事件代码全部都在ProWindow1.xaml.cs中,通过事件名找到对应的代码块。

1、通过下拉框选择当前地图的要素图层

            //清除combox当前的列表内容combox_feature.Items.Clear();// 获取当前地图var map = MapView.Active.Map;// 获取地图中所有要素图层var list_layers = map.GetLayersAsFlattenedList().OfType();foreach (var layer in list_layers){//将要素图层加入comboxcombox_feature.Items.Add(layer);}

通过点击下拉框按钮,将当前地图中所有的要素图层加入到下拉框列表中,即可选择你要的要素图层。

2、通过打开对话框选择要素类

            OpenItemDialog openDlg = new OpenItemDialog(){Title = "选择一个要素",      //打开对话框标题MultiSelect = false,          //是否可以多选Filter = ItemFilters.FeatureClasses_All,       //类型筛选};//打开对话框bool? ok = openDlg.ShowDialog();//如果没有选择内容,则返回if (!ok.HasValue || openDlg.Items.Count() == 0)return;//如果有选择内容,返回选择的内容var item = openDlg.Items.First();//将选择的内容置入comboxcombox_feature.Text = item.Path;

这是简单的打开对话框选择要素类,之前的系列文章已经写过了。

3、点击字段名列表combox_field控件时,列出所有字段名 

                        // 清空combox_fieldcombox_field.Items.Clear();await QueuedTask.Run(async () =>{// 获取所选图层的所有字段var fields = layer.GetFieldDescriptions();foreach (var field in fields){await QueuedTask.Run(() =>{// 在UI线程上执行添加item的操作Application.Current.Dispatcher.Invoke(() =>{// 将所有字段名添加到combox_field中combox_field.Items.Add(field.Name);});});}});

当事件触发时,通过layer.GetFieldDescriptions()方法获取所有字段,并添加到combox_field的Items里,这样下拉列表里就会列出所有的字段。

4、点击按钮,在列表框中显示所有字段值

                List values = new List();                // 打开要素图层的表格var table = initLayer.GetTable();// 定位到属性表的游标using (var tableCursor = table.Search(null, false)){while (tableCursor.MoveNext()){// 获取当前记录的值var row = tableCursor.Current;var currentValue = row[init_fieldname];// 将不重复的字段值加入listbox_fieldif (values.Contains(currentValue.ToString())){continue;}else{values.Add(currentValue.ToString());// 切换回 UI 线程上下文,将字段值添加到 ListBox 控件中Dispatcher.Invoke(() =>{listbox_field.Items.Add(currentValue.ToString());});}}}});

先创建一个空列表values,用来储存字段值。

通过GetTable()方法获取要素图层的属性表,再逐行搜索字段值,如果出现新的值,就存入values,并放到listbox_field的Items,即可显示在列表框里了。

以上只列出几个步骤的核心代码,完整的可以看文章末尾放出的工程文件。我是ArcGIS Pro SDK和C#的初学者,代码也仅仅是可运行,代码质量肯定是不好,特别是C#的多线程,差点没把我搞晕,大伙凑和着看吧。


四、工程文件分享

 最后,放上工程文件的链接:

WPFProWindowhttps://pan.baidu.com/s/1zvyF03K008lBrspHhZ3lRw?pwd=kzuw

PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...