Ошибка рендеринга с элементами управления 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; };
}
}
После изменения размера формы я не мог заставить проблему отображения.