WPF ElementHost не может рисовать при включенной двойной буферизации

Привет, у меня возникла проблема, аналогичная этому вопросу.

Что для меня отличается, так это то, что я использую в WinForms-MainForm «CreateParams-Method» для принудительной двойной буферизации. Код для этого следующий (например, DataGridView рисует неправильно):

protected override CreateParams CreateParams
{
    get
    {
        // Activate double buffering at the form level.  All child controls will be double buffered as well.
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED
        return cp;
    }
} 

Моя проблема теперь в том, что пока этот CreateParams активирован, содержимое моего WPF-ElementHost в WinForms-Usercontrol отображается только при наведении курсора мыши.

Краткое описание: UserControl «открывается», но прозрачно. После того, как я наведу на него курсор мыши, например ComboBoxes будут нарисованы.

Как только я закомментирую CreateParams, все работает нормально (с WPF-ElementHost). Можно ли просто отключить / использовать разные CreateParams для WPFElementHost?


person basti    schedule 09.10.2012    source источник
comment
Вы когда-нибудь решали эту проблему? У меня такая же проблема.   -  person Tormod Fjeldskår    schedule 18.02.2013
comment
@ TormodFjeldskår: Nej. Я так и не нашел способа решить эту проблему. Я просто закомментировал CreateParams-Section для всего приложения. А ты?   -  person basti    schedule 26.02.2013
comment
Нет, к сожалению нет. Код CreateParams удален из формы и добавлен только на те экраны, на которых не размещены элементы управления WPF.   -  person Tormod Fjeldskår    schedule 26.02.2013


Ответы (1)


У меня сработало изменение режима рендеринга в элементе управления WPF:

private void Control_Loaded(object sender, RoutedEventArgs e)
{
    HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
    HwndTarget hwndTarget = hwndSource.CompositionTarget;
    hwndTarget.RenderMode = RenderMode.SoftwareOnly;
}
person Eduardo Wada    schedule 17.06.2015
comment
Я больше не могу это воспроизвести, это было давно ... ... извините за то, что не принял ваш ответ: / - person basti; 08.07.2015
comment
На самом деле, позже я обнаружил, что этот ответ имеет проблему, связанную с графическими драйверами, и приведет к сбою всей системы на некоторых компьютерах stackoverflow.com/ q / 17473857/1102585, он отлично работает для большинства, но на 1 из 5 машин, которые я тестировал, произошел сбой с этим решением. - person Eduardo Wada; 08.07.2015