오케이, 몇 시간 동안 시도해 본 후 가능한 방법을 찾았습니다. "Windows 7 Paint"또는 유사한 Windows 7 리본 응용 프로그램과 같은 100 % 원래 동작이 아니지만 대부분의 경우 작동합니다.
첫째, 당신은 응용 프로그램 메뉴가 팝업이 열릴 위치를 정의하는 Placement
속성을 가진 Popup
, 실현되는 것을 알 필요가있다. 기본 동작을 PlacementMode.Left
으로 재정의해야합니다. 이렇게하면 팝업 메뉴가 메뉴 버튼 바로 옆에서 열립니다.
다음으로 Popup.HorizontalOffset
속성을 음수 인 RibbonApplicationMenu.Width
으로 설정해야합니다. 이 작업은 Binding과 변환기를 사용하여 값을 무효화합니다.
<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"
>
을 그리고,의 코드를 다음과 같이
<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
에 정의되어 있습니다 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"리본 메뉴처럼 실제로 어떻게 작동하는지 알 수 있지만 그때까지는 좋은 해결 방법입니다.
이 레이아웃 문제는 Windows Vista에만 있습니다. Windows 7에서는 리본 응용 프로그램 메뉴가 추가 코드없이 원하는 위치에 배치됩니다. – LWChris