Окно WPF не обновляется при работе через RDP - PullRequest
1 голос
/ 14 декабря 2011

У меня довольно странная проблема.Я использую INotifyPropertyChanged для управления поведением видимости моего приложения.При соблюдении определенных критериев в окне отображается обновленная информация.Чтобы соответствовать рекомендациям по дизайну, я отключил хром и добавил свою собственную логику закрытия, перемещения и скрытия.Все отлично работает, за исключением одного очень раздражающего поведения.Когда я запускаю программу в режиме 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}">

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

В итоге я решил установить AllowTransparency = "False". По какой-то причине прозрачность в RDP может вызвать проблемы с обновлением. Мне пришлось пожертвовать любителями закругленных углов, но теперь окно обновляется по мере необходимости.

P.S. После удаления прозрачности возможно, что у вас останется окно с 4-пиксельной серой рамкой. Чтобы удалить эту границу, просто установите ResizeMode = "NoResize".

2 голосов
/ 14 декабря 2011

Я сталкивался с этим раньше в некоторых приложениях, которые я написал с очень простым пользовательским интерфейсом. Кнопки отображаются неправильно, границы отсутствуют, списки не обновляются, градиенты имеют артефакт перехода цвета, при котором они постепенно не переходят от одного цвета к другому и т. Д.

Я всегда думал, что это проблема с тем фактом, что WPF использует графическое оборудование для рендеринга, а блоки RDP и VM выполняют смешные махинации с графикой. Я не уверен, что RemoteDesktop делает в том, что касается вывода, но в виртуальных машинах обычно используется макетированный универсальный графический контроллер, который не всегда производит то, что вы ожидаете.

На следующей статье я нашел это:

На сервере RDP использует собственный видеодрайвер для визуализации вывода на дисплей. путем построения информации рендеринга в сетевые пакеты используя протокол RDP и отправляя их по сети клиенту.

Протокол удаленного рабочего стола - MSDN

То есть звучит так, будто графический драйвер используется для визуализации вывода, а не графический чипсет (что, я думаю, имеет смысл).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...