.net 4.0-.在XP SP3上渲染时出现NET4.0 WPF问题



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

我一直在研究这个问题,并试图进一步调试。

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

    受保护的重写void OnSourceInitialized(EventArgs e){var hwndSource=演示源。FromVisual(this)as HwndSource;if(hwndSource!=null){hwndSource。CompositionTarget。RenderMode=渲染模式。仅限软件;_日志。调试("成功将渲染模式设置为软件");

            _log.Debug("WPF Tier = {0}", RenderCapability.Tier / 0x10000);
        }
        base.OnSourceInitialized(e);
    }
    

日志显示层为0。这个XP SP3盒子似乎有DirectX 9.0c。4.将以下代码添加到App.xaml.cs:

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

我不知道还能尝试什么。欢迎任何协助!

谢谢,

我相信我已经得到了答案(至少有一个解决方案:)。整件事有两件事困扰着我。

  1. ComboBox项目周围的边框(当它们不需要时)
  2. 动态绑定的ComboBox项中的值闪烁。即"ASDFASDF"将在"ASDF"one_answers"ASDFASDF"之间切换

为了修复第1项,我删除了App.xaml文件中的Border样式定义。在每个标签上单独定义Border属性。我必须进一步研究这个问题。

至于第2项,我使用了本文中的UniformWrapPanel代码。这似乎一直在调用protected override Size MeasureOverride(Size availableSize),不仅会减慢速度,而且不确定如何最好地呈现ComboBox中的内容。最后,我定义了我能想到的最宽的Width属性,但很可能最终绑定到视图模型中的一个属性。我必须弄清楚如何根据字体大小和字符长度来确定宽度。

我希望这能帮助一些人:)

干杯,

最新更新