首页 > 解决方案 > 重新连接 RDP 时 WPF 应用程序更新布局

问题描述

具有 Prism 区域管理器和区域名称的内容控件的 WPF 窗口。棱镜区域有一个注入到它的用户控件。窗口打开并满载,重新连接 RDP 后,窗口 Prism 区域丢失了注入的视图。我发现在 RDP 上重新连接寡妇正在更新布局并重新渲染,加载事件正在触发并且 UpdateLayout 也是如此。

任何想法 ?

我已经观察了以下解决方案,但对这个解决方案没有帮助。

WPF:防止 RDP(断开)连接后卸载和加载

<ContentControl x:Name="DetailRegion"    Grid.Row="1"
                        Visibility="{Binding IsAgentVisible,`enter code here`
                                             Converter={StaticResource BoolVisibilityConverter},
                                             ConverterParameter=Collapsed}"
                        HorizontalAlignment="Left"
                        VerticalAlignment="Top"
                        Focusable="False"
                        Padding="5"
                        regions:RegionManager.RegionManager="{Binding CvaRegionManager,UpdateSourceTrigger=PropertyChanged}"
                        regions:RegionManager.RegionName="StandAloneCVAViewRegion" />

标签: wpfrdp

解决方案


当 RDP 重新连接承载内容控件的控件时,将重新创建。我可以通过 C# 代码创建 Prism 区域来解决问题,因此我可以处理重新创建控件的情况并检查 Region 是否已经存储了视图。

 private void CvaControl_Loaded(object sender, RoutedEventArgs e)
        {                
            SetRegionManager(this.DetailRegion, "StandAloneCVAViewRegion");
        }

        void SetRegionManager(DependencyObject regionTarget, string regionName)
        {
            var cvaRegionManager = ((CvaApplicationViewModel) DataContext).CvaRegionManager;
            if (cvaRegionManager.Regions.ContainsRegionWithName("StandAloneCVAViewRegion"))
            {
                this.DetailRegion.Content = cvaRegionManager.Regions["StandAloneCVAViewRegion"].ActiveViews.First();
                return;
            }
            RegionManager.SetRegionName(regionTarget, regionName);
            RegionManager.SetRegionManager(regionTarget,cvaRegionManager);
        } 

推荐阅读