我将Windows 8.1应用移植到UWP。在特定屏幕上,用户必须在返回之前修复所有输入错误。在Windows 8.1应用程序中,当出现错误时点击后退按钮会在后退按钮(而不是返回)处显示包含警告的Flyout
。但是UWP应用程序使用系统提供的后退按钮。这可能是shell绘制的,也可能是平板模式described here。
我可以找到FrameworkElement
来传递给FlyoutBase.ShowAt
吗?否则,如何在系统后退按钮附近尽可能显示警告Flyout
?它的位置因平板电脑与桌面模式而异。
答案 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);
}
}
<强>结果:强>