在32位Windows 7和Windows 8.1上的WPF渲染问题
我有一个WPF应用程序,我尝试在几个虚拟机上安装。在每个64位Windows上,它工作正常,但在每个32位窗口中,WPF应用程序UI的反应都很笨拙。在32位Windows 7和Windows 8.1上的WPF渲染问题
在32位机器上WPF应用程序有什么特别的吗?
由于@swiszcz铅,我设法解决在Win 7和Win 8.1 x86的VM呈现问题通过添加下面的代码上的应用程序启动方法:
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
编辑:是完全最佳,我现在检查程序是在物理机器上还是在虚拟机上运行。在虚拟机上,我将RenderMode设置为SoftwareOnly,并在物理机上将RenderMode设置为Default。
下面是代码这样做:
public partial class App : Application
{
public App()
{
Startup += Application_Startup;
Exit += Application_Exit;
InitializeComponent();
}
/// <summary>
/// Detect if the local machine is a virtual or a physical one
/// </summary>
/// <returns>True if the local machine is virtual, False if the local machine is physical</returns>
private bool IsVirtualMachine()
{
using (var searcher = new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem"))
{
using (var items = searcher.Get())
{
foreach (var item in items)
{
string manufacturer = item["Manufacturer"].ToString().ToLower();
if ((manufacturer == "microsoft corporation" && item["Model"].ToString().ToUpperInvariant().Contains("VIRTUAL"))
|| manufacturer.Contains("vmware")
|| item["Model"].ToString() == "VirtualBox")
{
return true;
}
// Check "HypervisorPresent" property, which is available in some cases.
var hypervisorPresentProperty
= item.Properties
.OfType<PropertyData>()
.FirstOrDefault(p => p.Name == "HypervisorPresent");
if ((bool?)hypervisorPresentProperty?.Value == true)
{
return true;
}
}
}
}
return false;
}
private void Application_Startup(object sender, StartupEventArgs e)
{
//Alter the rendering for the virtual machine (see Bug
if (this.IsVirtualMachine())
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;
else
RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.Default;
}
}
您应该注意,即使是具有问题视频卡驱动程序的物理机器也可能让WPF应用程序受到影响。因此,您应该为最终用户提供配置软件渲染的方法,而不仅仅是硬代码。 –
也许你是对的,我会考虑让它通过.config文件管理,而不是最终用户参数,但确实是高级支持用户会做的事情。 Thx让我意识到这个问题 –
我假设您正在使用部署的Click Once选项,您需要首先检查您的所有依赖关系,并确保所有的依赖关系都与x86兼容,如果他们进入您的项目属性,请确保在Build有平台目标确保任何CPU被检查。这是我开始的地方。
其实我正在使用WIX来安装所有的依赖关系。我将检查构建设置 –
所有项目已在Build/Platform Target属性中设置为x86。它可以在任何x64 Windows上正常工作。是否有可能与虚拟机连接?我不知道在真实安装中是否会出现htis问题......并且我无法继续使用它 –
支票DOTNET版本 –
究竟你的意思由*“UI响应笨拙” *? – bassfader
我有一个Windows移动样式的应用程序。当我点击一个菜单按钮时,界面的一部分发生了变化,剩下的不用,但是其他部分会在你用鼠标指针输入时显示出来。 –