我有一个相当奇怪的问题。我正在使用INotifyPropertyChanged来控制我的应用程序的Visibility行为。满足某些条件时,窗口将显示更新的信息。为了满足设计指南,我已经禁用了chrome并添加了我自己的关闭,移动和隐藏逻辑。一切都很好,除了一个非常讨厌的行为。当我在RDP模式下运行程序时,如果我通过更改其崩溃的可见性来隐藏窗口,则最小化RDP会话并将其还原。我的窗口不再刷新以显示最新信息。我尝试了一切,包括使视觉无效,更新布局,使用渲染委托。什么都行不通。应用程序正在运行,我可以看到实际数据在调试期间发生了变化,但RDP会话拒绝重绘它。更奇怪的是,我可以拖动窗口,RDP会话正在桌面重绘,但窗口内没有任何变化。它就像是时间冻结了。
这是我窗口的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}">
答案 0 :(得分:2)
我之前在一些用非常简单的UI编写的应用程序中遇到过这种情况。按钮绘制不正确,边框丢失,列表不刷新,渐变经历颜色踩踏神器,它们不会逐渐从一种颜色变为另一种颜色等。
我一直认为这是一个问题,因为WPF使用图形硬件进行渲染,RDP和VM框用图形做一些有趣的恶作剧。我不确定RemoteDesktop对其渲染输出的作用,但VM框通常使用模拟的通用图形控制器,并不总能产生您期望的效果。
在下面的文章中我发现了这个:
在服务器上,RDP使用自己的视频驱动程序来呈现显示输出 通过将渲染信息构造成网络数据包 使用RDP协议并通过网络将它们发送给客户端。
Remote Desktop Protocol - MSDN
这听起来像是一个图形驱动程序用于渲染输出而不是图形芯片组(我觉得这很有意义)。
答案 1 :(得分:2)
最终解决方案是我需要设置AllowTransparency =“False”。出于某种原因,RDP的透明度可能会导致刷新问题。我不得不牺牲鸽友的圆角,但现在窗口会根据需要刷新。
P.S。删除透明度后,您可能会留下一个显示4像素灰色边框的窗口。要删除该边框,只需设置ResizeMode =“NoResize”。