Ошибка рендеринга с элементами управления WPF внутри ElementHost

У меня есть элемент управления WinForms, внутри которого есть TableLayoutPanel, который содержит несколько ElementHosts, и каждый ElementHost содержит элемент управления WPF.

Все работает отлично, за исключением случаев, когда размер элементов управления больше, чем окно, и ScrollBar; когда я прокручиваю вниз, элементы управления оказываются искаженными, например:

enter image description here

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

Это не происходит с управлением WinForms в том же окне, что и WPF; любая идея, почему это происходит, и любое решение для этого?

Ответ 1

this.Loaded += delegate
{
    var source = PresentationSource.FromVisual(this);
    var hwndTarget = source.CompositionTarget as HwndTarget;

    if (hwndTarget != null)
    {
        hwndTarget.RenderMode = RenderMode.SoftwareOnly;
    }
};

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

Ответ 2

У меня была аналогичная проблема и я решил принудительно обновить ElmenetHost в событии прокрутки TableLayoutPanel

Ответ 3

Хорошо, это будет похоже на тотальное B.S. но это сработало для меня: в событии Load вашей формы измените размер формы.

public class MyForm : Form
{
   public MyForm()
   {
      Load += (o, e) => { Width -=1; Width +=1; };
   }
}

После изменения размера формы я не мог заставить проблему отображения.