14

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

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

在此处输入图像描述

在最大化窗口或重新调整窗口大小时,控件会正确呈现(减小大小以使控件超出可见区域,然后再次增加大小以将它们带回可见区域)

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

4

3 回答 3

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

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

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

于 2012-09-28T08:59:43.943 回答
1

ElmenetHost我有一个类似的问题并解决了在滚动事件中强制刷新TableLayoutPanel

于 2012-08-16T09:21:37.973 回答
0

好的,这听起来像是完全的废话,但它对我有用:Load如果您的表格,请调整表格大小。

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

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

于 2015-07-30T23:07:41.610 回答