在运行.NET4.0内置应用程序的基于Win 7 x64的系统上,一切都很好。但是,XP SP3盒子不太好用。渲染似乎是一个问题。边框出现在我不想要的地方,ItemsControl中动态填充的项目在组合框中的值之间切换! 以下是我到目前为止所尝试的内容。
我一直在经历this问题,并尝试进一步调试。
在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);
}
日志显示Tier为0.此XP SP3框似乎有DirectX 9.0c。 4.在App.xaml.cs中添加了以下代码:
protected override void OnStartup(StartupEventArgs e)
{
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
我不知道还有什么可以尝试的。欢迎任何帮助!
谢谢,
答案 0 :(得分:0)
我相信我得到了答案(至少是解决方案:))。关于整件事情,有两件事让我烦恼。
ComboBox
个项目的边界ComboBox
项目中的值闪烁。即“ASDFASDF”将在“ASDF”和“ASDFASDF”之间轻弹。为了修复第1项,我在App.xaml文件中取出了Border
样式定义。在每个标记上单独定义Border
属性。我将不得不进一步研究这个问题。
对于第2项,我使用的是this文章中的UniformWrapPanel
代码。这似乎一直在调用protected override Size MeasureOverride(Size availableSize)
,不仅会减慢速度,还不能确定如何最好地渲染ComboBox中的内容。最后,我定义了我能想到的最宽Width
属性,但最有可能最终绑定到View-Model中的属性。我必须弄清楚如何根据字体大小和要适应的字符长度来确定宽度。
我希望这会有所帮助:)
干杯,