使用ElementHost中的WPF控件呈现问题

时间:2012-08-08 07:36:10

标签: c# .net wpf winforms elementhost

我有一个WinForms控件,里面有TableLayoutPanel,其中包含多个ElementHosts,每个ElementHost包含一个WPF控件。

一切正常,除非控件的大小比窗口大,ScrollBar就在那里;当我向下滚动时,控件变得扭曲,就像这样 -

enter image description here

在最大化窗口或重新调整窗口大小时,控件可以正确渲染 (减小控件离开可见区域的尺寸,然后再次增大尺寸,使它们回到可见区域)

WinForms控件在同一个窗口中只发生WPF而不会发生这种情况;知道为什么会发生这种情况以及任何解决方案吗?

3 个答案:

答案 0 :(得分:14)

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

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

尝试在您托管的wpf控件中使用它。这是win表单中托管的wpf控件的已知呈现问题。仅将渲染模式更改为软件将解决问题。

答案 1 :(得分:1)

我遇到了类似的问题并解决了在ElmenetHost

的滚动事件中刷新TableLayoutPanel的问题

答案 2 :(得分:0)

好的,这听起来像总B.S.但它对我有用:在表单的Load事件中,调整表单大小。

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

在调整表单大小后,我无法强制显示问题。