c# - 页面中心的 MenuFlyout

标签 c# xaml windows-8.1 windows-10 uwp

在我的 UWP 中,我试图在框架中心打开一个 MenuFlyout。

我怎样才能把它放在中心?

我试过这段代码,但它在框架顶部设置了弹出按钮。

private void ListView_ItemClick(object sender,ItemClickEventArgs e) {
    var m = new MenuFlyout();
    var t = new MenuFlyoutItem() { Text = "SomeTxt"};
    m.Items.Add(t);
    m.ShowAt((FrameworkElement)Frame);
}

甚至尝试添加 m.Placement = Windows.UI.Xaml.Controls.Primitives.FlyoutPlacementMode.Center;但 FlyoutPlacementMode 枚举不包含 Center .

最佳答案

不幸的是没有 Center FlyoutPlacementMode 中的值因此您需要编写更多代码来解决问题。

思路是先设置FlyoutPlacementModeFull , 然后我们改变 Style 而不是让内容拉伸(stretch)到填满整个页面的 MenuFlyoutPresenter使其内容水平和垂直居中。

所以我所做的是使用 Blend 生成以下默认样式并将其放置在 Page.Resources 中,然后我指定了 HorizontalAlignment="Center" VerticalAlignment="Center"在根上 Grid以使内容居中。

<Page.Resources>
    <Style x:Key="CenteredMenuFlyoutPresenterStyle" TargetType="MenuFlyoutPresenter">
        <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundChromeMediumLowBrush}" />
        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundChromeHighBrush}" />
        <Setter Property="BorderThickness" Value="{ThemeResource FlyoutBorderThemeThickness}" />
        <Setter Property="Padding" Value="{ThemeResource MenuFlyoutPresenterThemePadding}" />
        <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled" />
        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled" />
        <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto" />
        <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
        <Setter Property="ScrollViewer.IsHorizontalRailEnabled" Value="False" />
        <Setter Property="ScrollViewer.IsVerticalRailEnabled" Value="False" />
        <Setter Property="ScrollViewer.ZoomMode" Value="Disabled" />
        <Setter Property="MinWidth" Value="{ThemeResource FlyoutThemeMinWidth}" />
        <Setter Property="MaxWidth" Value="{ThemeResource FlyoutThemeMaxWidth}" />
        <Setter Property="MinHeight" Value="{ThemeResource MenuFlyoutThemeMinHeight}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="MenuFlyoutPresenter">
                    <Grid Background="{TemplateBinding Background}" HorizontalAlignment="Center" VerticalAlignment="Center">
                        <ScrollViewer x:Name="MenuFlyoutPresenterScrollViewer" AutomationProperties.AccessibilityView="Raw" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
                            <ItemsPresenter />
                        </ScrollViewer>
                        <Border x:Name="MenuFlyoutPresenterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

然后简单地将样式应用到 MenuFlyout像这样 -

var m = new MenuFlyout
{
    Placement = FlyoutPlacementMode.Full,
    MenuFlyoutPresenterStyle = (Style)this.Resources["CenteredMenuFlyoutPresenterStyle"]
};

var t = new MenuFlyoutItem() { Text = "SomeTxt" };
m.Items.Add(t);
m.ShowAt((FrameworkElement)sender);

关于c# - 页面中心的 MenuFlyout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32209809/

相关文章:

c# - 如何使用 sqlserver 中的 C# 在 xaml 中绑定(bind)数据

c# - WPF - 当网格开始切割元素时使元素消失

c# - 我得到 `System.InvalidOperationException: Collection was modified; enumeration operation may not execute` ,莫名其妙

c# - [Azure 数据目录] : Read the data from Azure data catalog glossary Unauthorized error?

xaml - 图像不会显示在 Xamarin Forms 的 <Image> 中

c# - ms-appdata 的脚本通知

c# - 如何在 WindowsPhone/Windows 8.1 上按下 Enter 键时隐藏软键盘?

c# - 缓冲视频导致页面加载缓慢

c# - CSS 问题 : <hr> line not showing in non-compatibility view in IE 8

node.js - Windows Azure node.js Windows store 8.1 的推送通知 - 如何使用 'createRawTemplateRegistration' 模板?