Template10 ZXing框架和导航

Startail

我已经开始使用Template10,正在尝试将ZXing条形码扫描仪放入应用程序中。但是我对ZXing和Template10的工作方式有一些疑问。

当我启动ZXing扫描仪时,它似乎以其自己的布局覆盖了所有当前框架和内容。因此,当我启动取消动作时,没有任何可返回的内容。

框架始终位于启动框架的页面上,因此Template10无法理解正在发生任何事情。

我的代码:

public async Task ScanQR()
{
    try
    {
        var scanner = new ZXing.Mobile.MobileBarcodeScanner();

        var _overlay = new Views.Scanner();
        _overlay._cancel.Click += (object sender, RoutedEventArgs e) => { scanner.Cancel(); };
        _overlay._torch.Click += (object sender, RoutedEventArgs e) => { scanner.ToggleTorch(); };

        scanner.CustomOverlay = _overlay;
        scanner.UseCustomOverlay = true;

        var result = await scanner.Scan();
        if (result != null)
        {
             // Handle Result
        }
    }
}

如您在快照(1)(2)上看到的,应用程序上的堆叠面板被覆盖。如您所见,它取代了[Frame]-> [ContentPresenter]中的内容。

取消后,如何使代码返回上一页?我知道我可能需要对此进行封装,但是我对此一无所获。一直在寻找任何有类似问题的人。所以我转向你们。

(1)。在ZXing.Scan()之前

(2)。ZXing.Scan()之后

---补充信息---

在不使用Template10的普通应用程序上,此问题的解决方案是使用以下代码来处理后退请求。这是我在某个地方的某个论坛上发现的,现在已经不记得源了。

如果此密码不存在,则在按电话上的硬件后退按钮时,应用程序将关闭。当我在电话上尝试Template10项目时,它会执行相同的操作。在PC上,您没有后退按钮。

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        var currentView = SystemNavigationManager.GetForCurrentView();
        if (!ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
        {
            currentView.AppViewBackButtonVisibility = this.Frame.CanGoBack ?
                AppViewBackButtonVisibility.Visible : AppViewBackButtonVisibility.Collapsed;
        }
        currentView.BackRequested += SystemNavigationManager_BackRequested;
    }

    private void SystemNavigationManager_BackRequested(object sender, BackRequestedEventArgs e)
    {
        if (this.Frame.CanGoBack)
        {
            this.Frame.GoBack();
            e.Handled = true;
        }
    }
格蕾丝·冯

当我启动ZXing扫描仪时,它似乎以其自己的布局覆盖了所有当前框架和内容。因此,当我启动取消动作时,没有任何可返回的内容了。

从您的图片中,我认为您正在使用Template 10 Hamburger来构建您的应用程序。那么Xaml树是这样的:Window.Current.Content-> Shell-> SplitView-> Frame-> MainPage。

只需阅读Zxing MobileBarcodeScanner的源代码,在创建Scanner的新实例时,它将从rootFrame应用程序的导航Scanner/CustomerScanner页面,这就是为什么您的“ Shell”不可用的原因Zxing.Scan()因此,基本上,如果您需要取消操作/导航回上一页,则可以使用rootFrame.GoBack();返回。

唯一的问题是,这rootFrame.CanGoBack是错误的。如果您查看App.xaml.cs中的代码,则在任务中OnInitializeAsync,它将“ Shell”页面设置为的内容Window.Current.Content,它不会使用该Frame.Navigate方法导航到该页面,以使rootFrame.CanGoBack变为真实,我们可以手动添加Shell页面,Backstack如下所示:

if (Window.Current.Content as ModalDialog == null)
{
    // create a new frame
    var nav = NavigationServiceFactory(BackButton.Attach, ExistingContent.Include);
    // create modal root
    Window.Current.Content = new ModalDialog
    {
        DisableBackButtonWhenModal = true,
        Content = new Views.Shell(nav),
        ModalContent = new Views.Busy(),
    };
    var rootFrame = Window.Current.Content as Frame;
    rootFrame.BackStack.Add(new Windows.UI.Xaml.Navigation.PageStackEntry(typeof(Views.Shell), null, null));
}

然后在“扫描仪”页面的“取消”方法中:

var rootFrame = RootFrame ?? Window.Current.Content as Frame ?? ((FrameworkElement)Window.Current.Content).GetFirstChildOfType<Frame>();
if (rootFrame.CanGoBack)
{
    rootFrame.GoBack();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Template10在页面内导航

来自分类Dev

从主页绑定到Template10设置

来自分类Dev

Prism.StoreApps VS template10

来自分类Dev

Template10中的Shell ViewModel

来自分类Dev

如何覆盖 Template10 中的 OnShareTargetActivated

来自分类Dev

Template10 - return user to the main page after resuming

来自分类Dev

使用Template10在UWP应用中测试挂起/恢复

来自分类Dev

集线器绑定在Template10中不起作用

来自分类Dev

使用Template10在UWP应用中测试挂起/恢复

来自分类Dev

在Template10应用程序中对GridView进行分组

来自分类Dev

静态方法中的UWP Template10 NavigationService

来自分类Dev

Template10 MVVM IoC 将 ViewModel 注入 Shell View

来自分类Dev

在Windows 10中共享目标Universal Apps Template10方法

来自分类Dev

Template10:AppBarButton:TextBox的内容不允许用户输入空间

来自分类Dev

C#使用Template10在汉堡菜单中显示用户名

来自分类Dev

UWP Template10菜单打开时隐藏汉堡包按钮

来自分类Dev

使用Template10时,特殊字符(如Ü,Ä,Ö)在运行时无法正确显示

来自分类Dev

更新Microsoft.Xaml.Behaviors.Uwp.Managed版本1.1.0会破坏Template10且Template不通过Windows存储证书

来自分类Dev

安装Template10 build 1.1.7后,在编译过程中我始终收到未设置为对象错误实例的对象引用的信息

来自分类Dev

实体框架断开图和导航属性

来自分类Dev

使用框架和组合框MVVM导航

来自分类Dev

全宽水平导航和基础框架

来自分类Dev

实体框架6-基类的继承和导航属性

来自分类Dev

UWP框架页面导航

来自分类Dev

Xamarin在框架内导航

来自分类Dev

Android Studio(0.3.2)和ZXing

来自分类Dev

iOS 10 Beta使导航栏按钮和标题在pushViewController上消失

来自分类Dev

如何导航到 Windows 10 1909 中的文本服务和输入语言

来自分类Dev

框架内的 Wpf 导航框架,在子项中禁用导航按钮

Related 相关文章

  1. 1

    使用Template10在页面内导航

  2. 2

    从主页绑定到Template10设置

  3. 3

    Prism.StoreApps VS template10

  4. 4

    Template10中的Shell ViewModel

  5. 5

    如何覆盖 Template10 中的 OnShareTargetActivated

  6. 6

    Template10 - return user to the main page after resuming

  7. 7

    使用Template10在UWP应用中测试挂起/恢复

  8. 8

    集线器绑定在Template10中不起作用

  9. 9

    使用Template10在UWP应用中测试挂起/恢复

  10. 10

    在Template10应用程序中对GridView进行分组

  11. 11

    静态方法中的UWP Template10 NavigationService

  12. 12

    Template10 MVVM IoC 将 ViewModel 注入 Shell View

  13. 13

    在Windows 10中共享目标Universal Apps Template10方法

  14. 14

    Template10:AppBarButton:TextBox的内容不允许用户输入空间

  15. 15

    C#使用Template10在汉堡菜单中显示用户名

  16. 16

    UWP Template10菜单打开时隐藏汉堡包按钮

  17. 17

    使用Template10时,特殊字符(如Ü,Ä,Ö)在运行时无法正确显示

  18. 18

    更新Microsoft.Xaml.Behaviors.Uwp.Managed版本1.1.0会破坏Template10且Template不通过Windows存储证书

  19. 19

    安装Template10 build 1.1.7后,在编译过程中我始终收到未设置为对象错误实例的对象引用的信息

  20. 20

    实体框架断开图和导航属性

  21. 21

    使用框架和组合框MVVM导航

  22. 22

    全宽水平导航和基础框架

  23. 23

    实体框架6-基类的继承和导航属性

  24. 24

    UWP框架页面导航

  25. 25

    Xamarin在框架内导航

  26. 26

    Android Studio(0.3.2)和ZXing

  27. 27

    iOS 10 Beta使导航栏按钮和标题在pushViewController上消失

  28. 28

    如何导航到 Windows 10 1909 中的文本服务和输入语言

  29. 29

    框架内的 Wpf 导航框架,在子项中禁用导航按钮

热门标签

归档