【问题标题】:.NET4.0 WPF issue on rendering on XP SP3 box.NET4.0 WPF 在 XP SP3 盒子上的渲染问题
【发布时间】:2011-06-07 04:17:14
【问题描述】:

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

我一直在处理this 问题并尝试进一步调试。

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

    受保护的覆盖无效 OnSourceInitialized(EventArgs e) { var hwndSource = PresentationSource.FromVisual(this) as HwndSource; 如果(hwndSource!= null) { hwndSource.CompositionTarget.RenderMode = RenderMode.SoftwareOnly; _log.Debug("成功将渲染模式设置为软件");

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

日志显示 Tier 为 0。这个 XP SP3 盒子似乎有 DirectX 9.0c。 4.在App.xaml.cs中添加如下代码:

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

我不确定还可以尝试什么。欢迎任何帮助!

谢谢,

【问题讨论】:

    标签: wpf .net-4.0


    【解决方案1】:

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

    1. 不需要在ComboBox 项目周围的边界
    2. 动态绑定的ComboBox 项目中的值闪烁。即“ASDFASDF”会在“ASDF”和“ASDFASDF”之间切换。

    为了修复第 1 项,我在 App.xaml 文件中取出了 Border 样式定义。在每个标签上单独定义Border 属性。我将不得不进一步研究这个问题。

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

    我希望这会对某人有所帮助:)

    干杯,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多