2011-12-13 26 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