@@ -69,6 +69,23 @@ private static void OnSecondaryMenuChanged(DependencyObject d, DependencyPropert
6969 flyout . MenuFlyoutPresenterStyle = Application . Current . Resources [ "DefaultMenuFlyoutPresenterStyle" ] as Style ;
7070 }
7171 }
72+ private static void WaitForTemplateParts ( MenuFlyoutPresenter presenter , Action < StackPanel , ItemsRepeater , ItemsPresenter > onReady )
73+ {
74+ void handler ( object s , object e )
75+ {
76+ var rootStack = DependencyObjectEx . FindDescendant ( presenter , "RootStack" ) as StackPanel ;
77+ var secondaryRepeater = DependencyObjectEx . FindDescendant ( presenter , "SecondaryItemsHost" ) as ItemsRepeater ;
78+ var mainItems = DependencyObjectEx . FindDescendant ( presenter , "MainItemsPresenter" ) as ItemsPresenter ;
79+
80+ if ( rootStack != null && secondaryRepeater != null && mainItems != null )
81+ {
82+ presenter . LayoutUpdated -= handler ;
83+ onReady ( rootStack , secondaryRepeater , mainItems ) ;
84+ }
85+ }
86+
87+ presenter . LayoutUpdated += handler ;
88+ }
7289
7390 private static void OnFlyoutOpened ( object sender , object e )
7491 {
@@ -79,48 +96,45 @@ private static void OnFlyoutOpened(object sender, object e)
7996 if ( popup ? . Child is not MenuFlyoutPresenter presenter )
8097 return ;
8198
82-
83- if ( DependencyObjectEx . FindDescendant ( presenter , "RootStack" ) is not StackPanel rootStack || DependencyObjectEx . FindDescendant ( presenter , "SecondaryItemsHost" ) is not ItemsRepeater secondaryRepeater || DependencyObjectEx . FindDescendant ( presenter , "MainItemsPresenter" ) is not ItemsPresenter mainItems )
84- return ;
85-
86- // Bind ItemsRepeater to the collection
87- secondaryRepeater . ItemsSource = GetSecondaryMenu ( flyout ) . Items ;
88-
89- // Reorder children
90- var placement = GetSecondaryMenuPlacement ( flyout ) ;
91- rootStack . Children . Clear ( ) ;
92- if ( placement == MenuFlyoutSecondaryMenuPlacement . Top )
99+ WaitForTemplateParts ( presenter , ( rootStack , secondaryRepeater , mainItems ) =>
93100 {
94- rootStack . Children . Add ( secondaryRepeater ) ;
95- rootStack . Children . Add ( new MenuFlyoutSeparator ( ) ) ;
96- rootStack . Children . Add ( mainItems ) ;
97- }
98- else
99- {
100- rootStack . Children . Add ( mainItems ) ;
101- rootStack . Children . Add ( new MenuFlyoutSeparator ( ) ) ;
102- rootStack . Children . Add ( secondaryRepeater ) ;
103- }
101+ secondaryRepeater . ItemsSource = GetSecondaryMenu ( flyout ) . Items ;
104102
105- // Auto-close handling
106- foreach ( var item in GetSecondaryMenu ( flyout ) . Items )
107- {
108- if ( item is ButtonBase btn )
103+ var placement = GetSecondaryMenuPlacement ( flyout ) ;
104+ rootStack . Children . Clear ( ) ;
105+ if ( placement == MenuFlyoutSecondaryMenuPlacement . Top )
109106 {
110- var oldHandler = GetAutoCloseHandler ( btn ) ;
111- if ( oldHandler != null )
112- {
113- btn . Click -= oldHandler ;
114- SetAutoCloseHandler ( btn , null ) ;
115- }
107+ rootStack . Children . Add ( secondaryRepeater ) ;
108+ rootStack . Children . Add ( new MenuFlyoutSeparator ( ) ) ;
109+ rootStack . Children . Add ( mainItems ) ;
110+ }
111+ else
112+ {
113+ rootStack . Children . Add ( mainItems ) ;
114+ rootStack . Children . Add ( new MenuFlyoutSeparator ( ) ) ;
115+ rootStack . Children . Add ( secondaryRepeater ) ;
116+ }
116117
117- if ( GetAutoCloseByClickOnSecondaryMenuItems ( flyout ) )
118+ // Auto-close handling
119+ foreach ( var item in GetSecondaryMenu ( flyout ) . Items )
120+ {
121+ if ( item is ButtonBase btn )
118122 {
119- RoutedEventHandler handler = ( s , args ) => flyout . Hide ( ) ;
120- btn . Click += handler ;
121- SetAutoCloseHandler ( btn , handler ) ;
123+ var oldHandler = GetAutoCloseHandler ( btn ) ;
124+ if ( oldHandler != null )
125+ {
126+ btn . Click -= oldHandler ;
127+ SetAutoCloseHandler ( btn , null ) ;
128+ }
129+
130+ if ( GetAutoCloseByClickOnSecondaryMenuItems ( flyout ) )
131+ {
132+ RoutedEventHandler handler = ( s , args ) => flyout . Hide ( ) ;
133+ btn . Click += handler ;
134+ SetAutoCloseHandler ( btn , handler ) ;
135+ }
122136 }
123137 }
124- }
138+ } ) ;
125139 }
126140}
0 commit comments