【问题标题】:Several parts of UI are not paintedUI有几个部分没有画出来
【发布时间】:2011-04-14 09:10:14
【问题描述】:

我们有一个 WPF 应用程序的非常奇怪的行为。有时(不是很常见),用户界面的某些部分根本没有绘制。

就在最近,配置视图上的保存按钮和文本框没有显示。更奇怪的是,重新登录后,导致新的视图实例,问题仍然存在。 有时,将鼠标悬停在缺失控件通常要使其可见的位置上会有所帮助。但是切换标签页,然后返回到缺少控件的原始标签页,它们又都丢失了。将鼠标悬停在其他控件上不会显示它们。

另一个问题是对话框有时会搞砸。部分对话框垂直移位。但是当例如对话框内的文本框获得焦点,它被正确绘制,而对话框的其余部分保持位移。

我不知道是什么导致了这个问题。欢迎任何想法。

[编辑 1] 到目前为止,我们一直在 Windows XP 上看到这一点。 Windows 7 似乎还可以。切换到软件渲染似乎也可以解决 Windows XP 上的问题,但我不确定。

【问题讨论】:

    标签: wpf


    【解决方案1】:

    问题已通过将 RenderMode 切换为 SoftwareOnly 得到解决。在 Windows XP 上运行时似乎是 .NET 4 问题:

    public class MyWindow : Window
    {
        protected void SetSoftwareRendering()
        {
            System.Windows.Interop.HwndSource hwndSource = PresentationSource.FromVisual( this ) as System.Windows.Interop.HwndSource;
            System.Windows.Interop.HwndTarget hwndTarget = hwndSource.CompositionTarget;
    
            hwndTarget.RenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
        }
    }
    

    也可以写

    System.Windows.Media.RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
    

    所有窗口都继承自 MyWindow,可以决定是否需要软件渲染。目前我们没有使用这种灵活性,而是在所有实例上都启用了它。

    【讨论】:

      【解决方案2】:

      如果其他 WPF 应用程序也发生这种情况,则可能是您的硬件、驱动程序、操作系统或 .NET 软件。

      如果没有,唯一的选择是尝试在最小的情况下在多台机器上重现。

      您能否制作一个有问题的最小版本并发布代码?

      【讨论】:

      • 就它只是偶尔发生的情况而言,将应用程序精简到最小的情况是完全不可能的。
      • 其他相同操作系统的机器上是否也会出现这种情况?
      • 是的。我们已经在几个触控面板和笔记本电脑上看到了它。
      • 是否有任何处于活动状态且可能发生冲突的触发器/动画?
      • 不,没有任何触发器和动画。它只是数据绑定控件,或者在置换对话框的情况下,新窗口显示为模式对话框。
      猜你喜欢
      • 2023-03-24
      • 2010-09-29
      • 1970-01-01
      • 2012-12-13
      • 2017-12-02
      • 1970-01-01
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多