我真的很惊讶这个问题似乎还没有被问到......如果有的话,但是我找不到它,道歉.
好的,所以我的工作计算机刚刚从Windows 7升级到Windows 8.令我非常恐怖的是,我的WPF应用程序在几个方面看起来有所不同......不同,我的意思是更糟糕的是,丑陋,控件没有正确排列等等.这是一个例子:
Windows 7的:
Windows 8:
Windows 8问题(仅从此图像):
所以,我的问题是:
为什么WPF应用程序在Windows 7和Windows 8之间看起来有所不同,这可以修复吗?
为了澄清这一点,我不是在两个操作系统上的WPF之间的差异列表之后.我也没有修复上面列出的各个点.我想让某人解释为什么这些UI看起来不同,例如.是什么导致了这些差异.我也听说过WPF中的一些系统设置,这使我能够让PC渲染应用程序就像在Windows 7上一样,但我不知道它是多么真实.
更新>>>
正如@AndrasSebö亲切地指出的那样,WPF有一个名为Windows 7主题的StackOverflow问题?,它修复了Windows XP的类似问题.不幸的是,它似乎对Windows 8没有任何影响.是否有任何微软用户确实知道实施了哪些差异导致此问题?还是有人?
更新2 >>>
好了,经过一番更多的测试,我开始认为这个问题是不相关的Windows主题.使用@ Gusdor答案中提供的代码,我尝试将主题更改为,Aero
并没有明显的区别......这让我思考.然后我将其更改Luna
为测试该代码并且它有效.
通过'工作',我的意思是Windows主题改变了,但UI控制,或更准确地说,不正确Padding
和Margin
保持.然后我尝试将主题更改为Luna
使用@AndrasSebö提到的XAML方法,同样的事情发生了... ScrollBar
s看起来不同,所以我可以看到主题已经改变,但问题仍然存在.
所以现在我认为这可能与我正在研究的这是一台全新的计算机这个事实有关...可能有一些我需要安装的dll或设置?我真的只是在这里猜测 - 我将整个Microsoft .NET Framework安装到版本4.5.1,因为我在Windows 8.1上.
这是一个绝对的噩梦,因为我没有时间去修复这个大型应用程序中的每个视图.如果可以的话请帮忙.
我的WPF项目使用.NET 4客户端配置文件.当我添加
<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
Run Code Online (Sandbox Code Playgroud)
要<Application.Resources>
在调试模式下启动程序,当我得到这个异常(在释放模式程序崩溃默默)
PresentationFramework.dll中出现'System.Windows.Markup.XamlParseException'类型的第一次机会异常
附加信息:'Set property'System.Windows.ResourceDictionary.Source'引发了一个异常.行号'14'和行位置'14'.
当我将PresentationFramework.Aero的属性"Copy Local"设置为true时,一切正常,异常就消失了.
"Copy Local"会在我的输出目录中放置PresentationFramework.Aero的副本,因此我需要将它包含在我的安装项目中.为什么这有必要?根据MSDN PresentationFramework.aero包含在.NET framework 4.0客户端配置文件中,因此也包含在GAC中.我觉得在我的应用程序中部署框架文件感觉不舒服.
UDATE:
正如Hans Passant建议我验证目录PresentationFramework.Aero存在于C:\windows\microsoft.net\assembly\gac_msil
.然后我使用fuslogvw.exe生成以下日志,在启动我的应用程序"SetACL Studio.exe"时创建,而ApplicationFramework.Aero.dll不在应用程序目录中.有趣的是,加载器甚至没有检查GAC.为什么?
*** Assembly Binder Log Entry (18.11.2011 @ 17:13:27) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable D:\Daten\Helge\Programmierung\SetACL Studio\Source\Bin\Debug\SetACL Studio.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = HKT520\Helge
LOG: …
Run Code Online (Sandbox Code Playgroud) 我想从我当前选择的系统主题中绘制我的WPF应用程序.
为了说明,这是我希望完成的Windows窗体版本.
这个Windows窗体窗口有一个基本的menustrip和一个特定主题的工具条.如果用户选择更改主题,它的外观将会改变:
此外,它将在Windows 7中运行时切换到areo主题.我想在WPF中执行相同操作.但我不确定如何在当前的Windows主题之后设置WPF窗口样式.此窗口(xaml)也有menustrip和toolstrip控件,但不完全遵循所选的Windows主题.
菜单和工具栏控件不保留XP Luna主题中的渐变.请注意,与其他WPF主题帖不同,我不是要覆盖User Selected Windows主题.这个问题似乎与我的关系很接近,但我希望主题所有控件与所选系统主题相匹配,除非被覆盖.这需要在每个控制的基础上完成吗?可以为整个项目配置吗?此MSDN文章仅涵盖自定义控件.
我将非常感谢有关如何使WPF菜单和WPF工具栏控件与当前系统主题相匹配的具体示例.
编辑:知道将菜单设置为什么颜色以使系统主题条纹出现在菜单项旁边也是很好的:(在"退出"的左侧)
("退出"的左侧)