2011-12-13 54 views
1

我有一个相当奇怪的问题。我正在使用INotifyPropertyChanged来控制我的应用程序的可见性行为。当满足某些标准时,窗口将显示更新的信息。为了符合设计指南,我禁用了Chrome,并添加了我自己的关闭,移动和隐藏逻辑。除了一个非常恼人的行为,一切都很好。当我在RDP模式下运行程序时,如果我通过将窗口的可见性更改为隐藏窗口来隐藏该窗口,则最小化RDP会话并将其恢复。我的窗口不再刷新以显示最新信息。我已经尝试了一切,包括无效的视觉,更新布局,使用渲染委托。什么都没有应用程序正在运行,我可以看到实际数据在调试过程中发生了变化,但RDP会话拒绝重新绘制它。更奇怪的是,我可以拖动窗口,RDP会话在桌面内重绘,但窗口内没有任何更改。就像它被及时冻结一样。当运行RDP时WPF窗口不刷新

这里是我的窗口中的XAML:我在,我非常简单的用户界面编写的一些应用程序遇到过这个

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit" 
    xmlns:tb="http://www.hardcodet.net/taskbar" 
    Title="MainWindow" 
    Height="{Binding WinHeight}" 
    Width="{Binding WinWidth}" 
    Top="{Binding WinTop}" 
    Left="{Binding WinLeft}" 
    ShowInTaskbar="False" 
    WindowStyle="None" 
    BorderThickness="0" 
    Background="Transparent" 
    AllowsTransparency="True" 
    Visibility="{Binding DisplayWindow}"> 

回答

2

解决方案结束了,因为我需要设置AllowTransparency =“False”。出于某种原因,RDP的透明度可能会导致刷新问题。我不得不牺牲那些发烧友的圆角,但现在窗户根据需要刷新。

P.S.删除透明度后,您可能会留下一个显示4像素灰色边框的窗口。为了移除边框,只需设置ResizeMode =“NoResize”。

+0

我很高兴解决了您的问题。您是否遇到过我在答案中描述的其他任何工件?其中最明显的是梯度步进问题。就个人而言,我不建议使用WPF界面编写程序,如果它们要通过RDP,Citrix或VM进行托管,并且您希望它们看起来不错。如果你想要简单的简,没有问题,但我还没有一个定制的用户界面,但执行我希望它通过其中一个平台运行的方式。 – CodeWarrior 2011-12-14 17:06:09

2

。按钮不正确绘制,边框丢失,列表不刷新,渐变体验颜色步进神器,他们不会逐渐从一种颜色改变到另一种,等等。

我一直认为这是一个事实问题WPF使用图形硬件进行渲染,而RDP和VM盒使用图形进行一些有趣的诡计。我不确定RemoteDesktop的渲染输出是什么,但VM盒通常使用一个模拟的通用图形控制器,它并不总是产生你期望的结果。

在下面的文章中,我发现这一点:

在服务器上,RDP使用自己的视频驱动程序,通过使用RDP协议由 构建渲染信息写入到网络数据包并将它们发送到渲染显示输出 网络到客户端。

Remote Desktop Protocol - MSDN

这使得它听起来像一个图形驱动程序用于呈现输出,而不是图形芯片组(我的猜测是有道理的)。

+0

谢谢你的回复。不幸的是,这个链接并没有为我提供解决方案。我将在下面发布针对遇到此问题的任何其他人的答案。 – evasilchenko 2011-12-14 16:44:26