0

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

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

4

1 回答 1

0

好的,经过数小时的尝试和错误,我找到了一种可能的方法。这不是像“Windows 7 Paint”或类似的 Windows 7 功能区应用程序那样的 100% 原始行为,但在大多数情况下它可以工作。

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

接下来,您需要将Popup.HorizontalOffset属性设置为 negated RibbonApplicationMenu.Width。这是通过 Binding 和一个转换器来否定该值。

<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>

转换器定义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

现在来看看行为上的不同:如果菜单因为屏幕结束而无法完全向右展开,则弹出窗口不会简单地向左打开一点,而是完全在左侧。也许我可以找出它实际上是如何表现得像“Windows 7 Paint”功能区的菜单,但在此之前这是一个很好的解决方法。

于 2013-01-03T12:32:29.090 回答