Flyout behind Appbar

前端 未结 1 1495
说谎
说谎 2021-01-20 02:56

When you want your app to expand to the full screen (including status bar and appbar), you have to do :

var applicationView = Windows.UI.ViewManagement.Appli         


        
相关标签:
1条回答
  • 2021-01-20 03:21

    I can't seem to solve my issue (or someone who can help). So i did it that way, if it can help someone :

    <Page.BottomAppBar>
            <CommandBar>
                <AppBarButton Icon="Preview" Label="Preview">
                    <AppBarButton.Flyout>
                        <MenuFlyout Opened="MenuFlyout_Opened" Closed="MenuFlyout_Closed">
                            <MenuFlyoutItem Text="Fit width" />
                            <MenuFlyoutItem Text="Fit height" />
                            <MenuFlyoutItem Text="Fit page" />
                        </MenuFlyout>
                    </AppBarButton.Flyout>
                </AppBarButton>
            </CommandBar>
        </Page.BottomAppBar>
    
    private void MenuFlyout_Opened(object sender, object e)
    {
      BottomAppBar.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
    }
    
    private void MenuFlyout_Closed(object sender, object e)
    {
      BottomAppBar.Visibility = Windows.UI.Xaml.Visibility.Visible;
    }
    

    Now my flyout appears fully, since there is no more appbar. For mvvm list view items, i did it in a behavior action :

    <DataTemplate x:Key="MvvmItemTemplate">
            <Grid>
    
                <i:Interaction.Behaviors>
                    <icore:EventTriggerBehavior EventName="Holding">
                        <local:OpenFlyoutAction />
                    </icore:EventTriggerBehavior>
                </i:Interaction.Behaviors>
    
                <FlyoutBase.AttachedFlyout>
                    <MenuFlyout>
                        <MenuFlyoutItem ..... Command="{Binding MarkRead}" />
                        <MenuFlyoutItem ..... Command="{Binding MarkUnread}" />
                        <MenuFlyoutItem ..... Command="{Binding PinToStart}" />
                    </MenuFlyout>
                </FlyoutBase.AttachedFlyout>
            </Grid>
        </DataTemplate>
    
    
    
    
    public class OpenFlyoutAction : DependencyObject, IAction
        {
            public object Execute(object sender, object parameter)
            {
                // Show menu
                FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
    
                // sometimes the appbar is stuck behind the appbar, so hide the appbar
                (sender as FrameworkElement).GetFirstAncestorOfType<Page>().BottomAppBar.Visibility = Visibility.Collapsed;
    
                // show the appbar again when flyout is closed
                var flyout = FlyoutBase.GetAttachedFlyout((FrameworkElement)sender);
                EventHandler<object> showBar = null;
                showBar = delegate (object s, object e)
                {
                    (sender as FrameworkElement).GetFirstAncestorOfType<Page>().BottomAppBar.Visibility = Visibility.Visible;
                    // unsubscribe handler:
                    flyout.Closed -= showBar;
                };
                flyout.Closed += showBar;
    
                return null;
            }
        }
    
    0 讨论(0)
提交回复
热议问题