在系统后退按钮附近显示弹出按钮

时间:2017-03-16 04:10:21

标签: c# xaml uwp

我将Windows 8.1应用移植到UWP。在特定屏幕上,用户必须在返回之前修复所有输入错误。在Windows 8.1应用程序中,当出现错误时点击后退按钮会在后退按钮(而不是返回)处显示包含警告的Flyout。但是UWP应用程序使用系统提供的后退按钮。这可能是shell绘制的,也可能是平板模式described here

我可以找到FrameworkElement来传递给FlyoutBase.ShowAt吗?否则,如何在系统后退按钮附近尽可能显示警告Flyout?它的位置因平板电脑与桌面模式而异。

1 个答案:

答案 0 :(得分:0)

您可以从Windows.UI.ViewManagement.UIViewSettings.UserInteractionMode属性粗略确定系统返回按钮的位置(左上角或左下角),这基本上决定了应用程序在桌面或平板电脑模式下运行。

此外,您可以创建两个虚拟0px Border来放置弹出按钮。

示例:

XAML:

<Grid x:Name="rootGrid" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Border x:Name="DesktopBorder" Height="0" Width="0" VerticalAlignment="Top" HorizontalAlignment="Left" />
    <Button Content="test" Click="ButtonBase_OnClick"></Button>
    <Border x:Name="TabletBorder" Height="0" Width="0" VerticalAlignment="Bottom" HorizontalAlignment="Left" />
</Grid>

CS:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    var flyout = new Flyout()
    {
        Content = new Rectangle() { Fill = new SolidColorBrush(Colors.Red), Height = 100, Width = 100 }
    };

    if (UIViewSettings.GetForCurrentView().UserInteractionMode == UserInteractionMode.Mouse)
    {
        flyout.Placement = FlyoutPlacementMode.Bottom;
        flyout.ShowAt(DesktopBorder);
    }

    if (UIViewSettings.GetForCurrentView().UserInteractionMode == UserInteractionMode.Touch)
    {
        flyout.Placement = FlyoutPlacementMode.Top;
        flyout.ShowAt(TabletBorder);
    }
}

<强>结果:

desktop mode

tablet mode