重新连接RDP时WPF应用程序更新布局

时间:2019-05-06 05:58:49

标签: wpf rdp

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

有什么想法吗?

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

WPF: Prevent unload & load after RDP (dis)connect

<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" />

1 个答案:

答案 0 :(得分:0)

在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);
        }