Ath*_*ari 25 .net c# windows wpf ribbon
我正在尝试Ribbon控制与结合RibbonWindow,但即使在琐碎的实验中他们也失败了.
System.Windows.Controls.Ribbon了对ribbon:前缀的引用并删除了前缀(为什么示例过时了?).
我已经看到很多问题:
让我们将工具栏移动到底部.现在我们看到了这个:

按钮位于工具栏之外.
最后,让我们最大化窗口:

报头的一半消失在屏幕外部的(技术上窗口是在屏幕的外部通过在每边8个像素,但其他应用不受此混淆).
我使用的是Windows 7,Aero,单显示器,没什么特别的.我害怕在Windows 8上测试应用程序...
有机会解决这个问题吗?
Jul*_*ain 30
在引擎盖下,WindowChrome类将其绑定ResizeBorderThickness到SystemParameters.WindowResizeBorderThickness其上,然后使用Win32 API GetSystemMetrics来确定系统边框大小.
但是,此方法的行为会根据可执行PE头中设置的子系统版本而更改.如果仅针对Windows Vista及更高版本(版本> = 6.0)进行编译,则它将返回比为旧操作系统编译时更薄的边框.在这个SO答案中有关于此的更多信息.
在针对.NET 4.5进行编译时,C#编译器将此版本设置为6.0,因为.NET 4.5不能在XP上使用.但是,WindowChrome该类似乎依赖于遗留行为,因此无法在Windows Vista和7上正确计算玻璃尺寸.
您可以针对.NET 4进行编译,以强制编译器将4.0用作其子系统版本值.功能区可作为WPF 4 单独下载.请注意,即使使用此解决方案,也应在项目属性中取消选中"启用Visual Studio宿主过程"以进行调试.否则,将使用vshost.exe进程,该进程标记为子系统版本6.0.
编辑: Olly在评论中提供了一种方法:
在项目文件
<subsystemversion>5.01</subsystemversion>中添加一个属性,该属性 错误地指示代码可以在Windows XP上运行.
您可以更改WindowChrome.WindowChrome窗口上的附加属性并使用所需的值,从而完全忽略系统值.你永远不应该这样做,但你可以.
Connect上存在关于行为更改GetSystemMetrics的现有错误,但这一切都归结为子系统版本,因此它是Microsoft视点中的一个功能.但是,WindowChrome该类应该被修复以在Vista/7下正常工作,特别是因为它现在是在.NET 4.5中构建的.
Yan*_*ang 10
这是另一个WorkAround,非常简单和简单的方法.只需在工具栏中添加负边距即可.您需要保留原始Window类而不是RibbonWindow!
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Application Name" Height="350" Width="525" Loaded="Window_Loaded" SizeChanged="Window_SizeChanged">
只需将此边距添加到功能区标题即可
<Ribbon Title="" Foreground="#333333" Margin="0,-22,0,0">
现在当你最大化窗口时,一切都保持正确

对于读这个问题的人,我自己也在回答.忘记可怕的捆绑色带控制并使用其他东西.在这里寻找一些替代方案:什么是最好的WPF功能区控件套件?(就像所有好问题一样,它虽然已经关闭).
到目前为止,Fluent Ribbon Control Suite看起来对我来说是最好的免费选择.基本功能正常工作(没有边框问题和最大化,窗口调整不是很慢等等).它具有Office样式并在禁用玻璃时保留它们(这意味着您不会在Metro中看到Windows9x-ish窗口).它的界面(后台,QAT)更像Office 2010.
也许在一个遥远的未来,微软将修复它的功能区,但是现在,寻找替代品.
| 归档时间: | 
 | 
| 查看次数: | 18644 次 | 
| 最近记录: |