【问题标题】:Black flashbacks when resize wpf element host调整 wpf 元素主机大小时出现黑色闪回
【发布时间】:2013-09-11 07:30:09
【问题描述】:

我有一个WPF UserControl,它在Winform 中显示为Element Host

当我快速更改屏幕大小或调整屏幕大小时,我会在背景中看到黑色闪回,直到 UserControl 达到适当的大小。

我在几个地方读到过它。

我读到的所有地方都说它只发生在 UserControl Load 并相应地带来解决方案。

我在 Resize 上看到过一个关于它的问题。但是那里提供的解决方案也是Load

Black background on resizing elementhost

我尝试调整屏幕大小以执行以下操作:UserControl.CreateGraphics ();,它不会像上面的答案所说的那样留下黑线。

我猜是因为我在调整大小而不是加载时使用了它。

此外,我找不到任何东西。

如果有人遇到此问题并找到解决方案,我很乐意回答。

【问题讨论】:

    标签: c# winforms user-controls elementhost


    【解决方案1】:

    在开发带有许多控件的窗体的 Windows 应用程序时,我们通常会遇到闪烁问题。摆脱这种闪烁的一种非常巧妙的方法是对整个表单及其子控件进行双重缓冲。但是,这不会加快控件绘制的速度,但它会在屏幕上停留一段时间并只显示更新的屏幕而不是闪烁。要实现这一点,我们需要启用 WS_EX_COMPOSITED 标志。只需将以下代码添加到您的表单代码中即可。

    C#:

    protected override CreateParams CreateParams
    {
       get 
        {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000; 
        // Turn on WS_EX_COMPOSITED
       return cp;
       }
    }
    

    VB .net:

    Protected Overrides ReadOnly Property CreateParams() As CreateParams
     Get
        Dim cp As CreateParams = MyBase.CreateParams
    cp.ExStyle = cp.ExStyle Or &H2000000  
        Return cp 
      End Get
     End Property
    

    【讨论】:

    • 我这样做了,它从屏幕上删除了所有控件(WPF)。在某些地方它们没有被删除并且黑色方块变得更糟,它不再闪回它永久保留。
    【解决方案2】:

    最终帮助我的是以下几行代码(Winform):

        protected override void OnResize(EventArgs e)
        {
            this.SuspendLayout();
            base.OnResize(e);
            this.ResumeLayout();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      相关资源
      最近更新 更多