如何修改WPF功能区应用程序菜单下拉列表位置?

时间:2013-01-01 14:58:59

标签: wpf layout ribbon-control

是否可以修改10/2010 WPF功能区的应用程序菜单的放置位置?我认为菜单在最左边的位置打开是非常不寻常的,所以我想改变它。

示例:在Word 2007中(由于您可能都知道 - 具有旧的功能区设计),应用程序菜单尽可能向右打开。我也想得到这种行为,因为在右边是菜单唯一明智的位置。它的所有条目都在左栏中,然后在按钮的正下方。我没有找到任何简单的方法来分配它的左侧位置。有人知道这是否可能以及如何做到这一点?

1 个答案:

答案 0 :(得分:0)

好的,经过多个小时的尝试和错误,我发现了一种可行的方法。这不是“Windows 7 Paint”或类似的Windows 7功能区应用程序中的100%原始行为,但在大多数情况下它都有效。

首先,您需要知道应用程序菜单是使用Popup实现的,Placement具有PlacementMode.Left属性,用于定义弹出窗口的打开位置。您需要将默认行为覆盖为Popup.HorizontalOffset。这将使弹出菜单在菜单按钮旁边打开。

接下来,您需要将RibbonApplicationMenu.Width属性设置为否定的<r:RibbonApplicationMenu> <r:RibbonApplicationMenu.Resources> <Style TargetType="Popup"> <Setter Property="Placement" Value="Left"/> <Setter Property="HorizontalOffset" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=r:RibbonApplicationMenu}, Path=Width, Converter={StaticResource ResourceKey=NegateIntegerConverter}}"/> </Style> </r:RibbonApplicationMenu.Resources> </r:RibbonApplicationMenu> 。这是通过Binding和转换器来完成的,以取消该值。

RibbonWindow.Resources

转换器在<r:RibbonWindow.Resources> <local:NegateIntegerConverter x:Key="NegateIntegerConverter"/> </r:RibbonWindow.Resources> 中定义如下:

local

必须在RibbonWindow

内声明<r:RibbonWindow x:Class="MainWindow" xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" xmlns:local="clr-namespace:ApplicationRootNamespace" > 命名空间
NegateIntegerConverter

最后,Public Class NegateIntegerConverter Implements IValueConverter Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert Return -CInt(value) End Function Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack Return -CInt(value) End Function End Class Class MainWindow End Class 的代码是应用程序根命名空间中的一个类:

{{1}}

现在对于行为上的差异:如果菜单无法完全展开,因为屏幕在那里结束,弹出窗口不会简单地向左打开,而是完全在左侧打开。也许我可以知道它实际上是如何表现得像“Windows 7 Paint”功能区的菜单,但这是一个很好的解决方法,直到那时。