关于Pro addin中,控制dockpane的状态

在Pro SDK中,可以通过dackpane的Hide()方法,对面板进行隐藏。
DockPane pane = FrameworkApplication.DockPaneManager.Find("pane_name");
pane.Hide();

但有个同事,在自定义的module中,希望在初始化方法中对指定的面板进行关闭,但使用Hide方法后,面板依旧显示。

究其原因,是Pro中进行布局还原导致的。

工程文件中,会将控件的布局信息进行存储,在下一次打开工程的时候,根据布局状态,将控件还原为上一次的状态。

当使用Module以autoload的方式加载时,会随core模块一起进行初始化,而非按需初始化,所以自定义模块的初始化方法执行的时间点会比较靠前。而对控件的状态控制,也会被Pro内部的布局还原而覆盖。

为了应对需求,提供两种方式来进行处理:

1、在工程关闭时进行后处理

protected override bool Initialize()
{
    ArcGIS.Desktop.Core.Events.ProjectClosingEvent.Subscribe((p) =>
    {
        //相关的控件控制
        return Task.FromResult(0);
    });
}

这样,工程保存布局信息,就是复合需求的,再次打开时就无需前处理了。

2、在初始化时,添加异步前处理

protected override bool Initialize()
{
    ArcGIS.Desktop.Core.Events.ProjectOpenedEvent.Subscribe((p) => {

        Task.Run(() => {
            System.Threading.Thread.Sleep(10000);
            FrameworkApplication.Current.Dispatcher.Invoke(() =>
            {
                //相关的控件控制
            });
        });
    });
}

这种方式更符合预期些,但在触发的时间上,需要在布局还原之后触发,由于Pro并没有提供相应的事件,比较难精准的控制。我这里采用了固定时长的异步等待的方式,但不是个很好的方案,最好尝试其他更为合适的事件,并结果状态验证,来进行更准确的控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值