在XP SP3框上渲染时出现.NET4.0 WPF问题

时间:2011-06-07 04:17:15

标签: wpf .net-4.0

在运行.NET4.0内置应用程序的基于Win 7 x64的系统上,一切都很好。但是,XP SP3盒子不太好用。渲染似乎是一个问题。边框出现在我不想要的地方,ItemsControl中动态填充的项目在组合框中的值之间切换! 以下是我到目前为止所尝试的内容。

我一直在经历this问题,并尝试进一步调试。

  1. 关闭桌面属性上的硬件加速功能。 (似乎没有任何区别)
  2. 添加注册表项以关闭硬件加速(似乎没有任何区别)
  3. 在MainWindow.Xaml.Cs上添加以下代码:

    protected override void OnSourceInitialized(EventArgs e)     {         var hwndSource = PresentationSource.FromVisual(this)as HwndSource;         if(hwndSource!= null)         {             hwndSource.CompositionTarget.RenderMode = RenderMode.SoftwareOnly;             _log.Debug(“成功将渲染模式设置为软件”);

            _log.Debug("WPF Tier = {0}", RenderCapability.Tier / 0x10000);
        }
        base.OnSourceInitialized(e);
    }
    
  4. 日志显示Tier为0.此XP SP3框似乎有DirectX 9.0c。 4.在App.xaml.cs中添加了以下代码:

    protected override void OnStartup(StartupEventArgs e)
        {
            RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
        }
    

    我不知道还有什么可以尝试的。欢迎任何帮助!

    谢谢,

1 个答案:

答案 0 :(得分:0)

我相信我得到了答案(至少是解决方案:))。关于整件事情,有两件事让我烦恼。

  1. 当他们不需要在那里时,ComboBox个项目的边界
  2. 动态绑定的ComboBox项目中的值闪烁。即“ASDFASDF”将在“ASDF”和“ASDFASDF”之间轻弹。
  3. 为了修复第1项,我在App.xaml文件中取出了Border样式定义。在每个标记上单独定义Border属性。我将不得不进一步研究这个问题。

    对于第2项,我使用的是this文章中的UniformWrapPanel代码。这似乎一直在调用protected override Size MeasureOverride(Size availableSize),不仅会减慢速度,还不能确定如何最好地渲染ComboBox中的内容。最后,我定义了我能想到的最宽Width属性,但最有可能最终绑定到View-Model中的属性。我必须弄清楚如何根据字体大小和要适应的字符长度来确定宽度。

    我希望这会有所帮助:)

    干杯,