окно wpf полностью черное - PullRequest
       3

окно wpf полностью черное

18 голосов
/ 11 августа 2009

Я продаю приложение WPF, на одном клиентском компьютере (из нескольких сотен) все окно приложения черное, кто-нибудь знает, что происходит?

Машина работает под управлением Windows XP с .net 3.5SP1, графический адаптер GeForce 6200 с двумя мониторами (отключение одного монитора не решает проблему).

Установка «Настройки совместимости» на «256 цветов» решает проблему (но это нереальное решение, мне нужно больше цветов, чтобы приложение выглядело хорошо).

Приложение - yaTimer (http://www.nbdtech.com/yaTimer/), оно имеет пользовательский хром окна, основанный на методах, описанных в этом посте http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx в разделе «Office 2007 без Aero».

Если кто-нибудь подскажет мне, что происходит, я буду очень благодарен.

Спасибо.

Ответы [ 9 ]

9 голосов
/ 16 августа 2011

У нас ( www.novamind.com ) в прошлом было несколько клиентов, у которых были похожие проблемы, из-за которых приложение рисовало неправильно или не работало вообще. Причины были:

  • графический драйвер не обновлен.
  • Тема Windows повреждена. Изменив тему Windows на что-то другое и обратно, решил проблему.
  • Windows работает на виртуальной машине. Большинство виртуальных машин имеют экспериментальную функцию аппаратного ускорения, которая часто не поддерживает приложения WPF. - Отключение аппаратного ускорения решает проблему.

Это также может помочь:

  • Переустановите .NET Framework - иногда установка повреждена.
  • Убедитесь, что установлены все последние обновления Windows.

Надеюсь, это поможет. Удачи.

2 голосов
/ 23 июня 2014

У меня есть эта проблема только при включенном GlassFrame в окне chome.

Попробуйте установить GlassFraneThickness на 0, и ваше окно будет отображаться снова. Вы потеряете рамку Glass, но лучше, чем черное приложение.

<shell:WindowChrome.WindowChrome>
    <shell:WindowChrome CaptionHeight="32" GlassFrameThickness="0" ResizeBorderThickness="5" CornerRadius="0" />
</shell:WindowChrome.WindowChrome>

Может быть, вы также можете попытаться заставить окно перекрасить. В моем случае содержимое окна показывалось, когда я перемещал окно на другой монитор или из окна просмотра и снова, поэтому перекраска, похоже, делает эту работу.

В исходном коде Microsoft.Windows.Shell есть функция _FixupWindows7Issues () (в классе WindowChromeWorker ), которая должна решить проблему согласно ее комментарию, но, очевидно, не т ...

1 голос
/ 11 июня 2018

У меня возникла та же проблема с приложением WPF при отладке. В меню «Отладка - Параметры» перейдите к пункту «Отладка - Общие» и отмените выбор параметра «Показывать инструменты времени выполнения в приложении» в разделе «Включить инструменты отладки пользовательского интерфейса для XAML». При следующем запуске приложения оно не будет перекрывать форму.

1 голос
/ 11 августа 2011

Возможный обходной путь - форсировать рендеринг в программном режиме:

http://msdn.microsoft.com/en-us/library/system.windows.interop.rendermode.aspx

В 3.5 это может быть установлено для каждого окна http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndtarget.rendermode%28VS.90%29.aspx, а в 4.0 дополнительно имеется настройка для всего процесса: http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.processrendermode.aspx

1 голос
/ 02 сентября 2010

У меня была проблема с переопределением шаблона окна. Я понял, что если вы наследуете стиль окна в Themes / Generic.xaml, это работает. Но на любом другом ресурсе вы получите черное окно. (VS 2008 - WPF 3.5)

0 голосов
/ 20 сентября 2018

Если вы используете виртуальную машину, отключите 3D-ускорение:)

0 голосов
/ 08 октября 2016

Недавно я столкнулся с похожей проблемой с черным окном в WPF в решении VB 2010 / .Net 4.0, где все остальные окна работали просто отлично. Виновным оказался способ, которым я включал видимость, используя следующие 3 команды ниже. Решение состояло в том, чтобы удалить все, кроме первой строки, со ссылкой на свойство Visibility (удаление только строки .Show приведет к правильному отображению в первый раз, но затем к черному):

             Application.MisbehavingBlackWindow.Visibility = System.Windows.Visibility.Visible
             Application.MisbehavingBlackWindow.Show()
             Application.MisbehavingBlackWindow.Activate()

У меня никогда раньше не было проблем с этой серией команд для показа окна WPF, поэтому я думаю, что попал в колею и никогда не удосужился проверить, был ли это оптимальный путь; по привычке я просто вставлял код по мере необходимости, чтобы вызвать окна. Это все еще работает для любого другого окна в любом другом решении, которое я когда-либо писал, но это заставило это отдельное окно стать черным Сначала это происходило только периодически в одной конкретной рутине, затем стало постоянным по неизвестным причинам. Ни одна из следующих строк кода, с которыми я экспериментировал, не имела никакого значения:

            Application.MisbehavingBlackWindow.InvalidateVisual()
            Application.MisbehavingBlackWindow.InvalidateArrange()
            Application.MisbehavingBlackWindow.UpdateLayout()
            Application.MisbehavingBlackWindow.BringIntoView()
            Application.MisbehavingBlackWindow.WindowState = WindowState.Minimized
            Application.MisbehavingBlackWindow.WindowState = WindowState.Normal

Удаление всех элементов управления из окна не имело никакого эффекта; он все равно станет черным, если он будет заполнен только одним TextBlock. С другой стороны, шаблон появился после того, как я попытался выполнить его из других подпрограмм, особенно если вставить первый блок кода в один, который вызывал другое окно. Если я вставил его непосредственно перед блоком кода, как показано ниже, окно стало черным; если я вставил его после, это не так

                Application.OtherWindow.Visibility = System.Windows.Visibility.Visible
                Application.OtherWindow.Show()
                Application.OtherWindow.Activate()

Решение работает (пока), даже если окно скрыто с помощью команды Window.Hide (). У меня уже был один, включенный в событие Sub в вызывающем окно, которое запускалось всякий раз, когда окно теряло фокус. Переключение его обратно с использованием свойства Visibility по-прежнему делает свое дело, не требуя каких-либо изменений этого оператора .Hide.

Надеюсь, это поможет любому, кто столкнется с этой раздражающей проблемой. Пока что большинство решений, которые я видел, разбросанных по Интернету, похоже, основаны на таких вещах, как темы Windows, видеокарты и другие внешние переменные, но мы, по-видимому, можем исправить хотя бы некоторые случаи этого права в нашем коде .Net. позади.

0 голосов
/ 02 сентября 2010

Попробуйте установить последний пакет DirectX на клиентском компьютере.

0 голосов
/ 12 августа 2009

Звучит так же, как проблема, с которой я столкнулся вчера вечером и разместил здесь:

Вопрос: WPF - Контент не отображается

Проверьте драйверы видеокарты как одну возможность

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