繁体   English   中英

从另一个页面返回后,UWP无法在文本框中设置文本

[英]UWP cannot set the text in a textbox after navigating back from another page

我有一个UWP应用。 我叫一个扫描仪控件,可以通过相机进行条形码扫描。 它有一个回调,可通过操作将结果返回。 因此,基本上,我在MainPage上,然后单击以启动扫描器,如下所示:

scanner.Scan(scanOptions).ContinueWith(t =>
{
    if (t.Result != null)
        HandleScanResult(t.Result);
});

上面的调用在scanner.Scan方法中将调用Frame.Navigate进入扫描仪控制页面。 扫描完成后,我首先调用Frame.Navigate返回MainPage,然后返回结果,该结果将在ContinueWith中调用上述HandleScanResult。 这是我导航到扫描页面并返回的方式:

public override async Task<Result> Scan(MobileBarcodeScanningOptions options)
{
    var rootFrame = RootFrame ?? Window.Current.Content as Frame ?? ((FrameworkElement) Window.Current.Content).GetFirstChildOfType<Frame>();
    var dispatcher = Dispatcher ?? Window.Current.Dispatcher;

    var tcsScanResult = new TaskCompletionSource<Result>();

    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        rootFrame.Navigate(typeof(ScanPage), new ScanPageNavigationParameters
        {
            Options = options,
            ResultHandler = r =>
            {
               tcsScanResult.SetResult(r);
            },
            Scanner = this,
            ContinuousScanning = false
        });
    });

    var result = await tcsScanResult.Task;

    await dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
    {
        if (rootFrame.CanGoBack)
            rootFrame.GoBack();
    });

    return result;
}

到目前为止,一切正常,我可以导航到扫描页面并再次返回。 如您所见,我每次都调用Dispatcher同步回UI线程。 调用时:

HandleScanResult(t.Result);

我在t.Result中有Result,这样很好。 问题在于,在该方法中,我尝试在MainPage的文本框中设置字符串。 调试时,我可以看到文本框上的Text属性具有字符串,但是方法完成后,文本框仍为空白。 我还确保也用分派器包装文本框Text属性的设置,以便将其同步到UI线程。 我没有收到任何错误或异常,但是我无法设置文本或更好的文本,没有设置它显示的文本,而是实际显示在文本框中。

我怀疑我可能存在同步问题,或者页面有两个实例,并且正在设置一个我看不到的实例,因为它被另一个实例覆盖了吗? 我不知道,我被卡住了。

谢谢!

如果要使用这种方式传递参数,则在调用Frame.GoBack方法时需要保持原始页面不变。 因此,您需要在第一页NavigationCacheMode设置为Required

<Page <!-- some XAML code -->
      NavigationCacheMode="Required"
      >

NavigationCacheMode.Required所做的是,无论帧的缓存大小如何,页面都将被缓存,并且每次访问都将重用缓存的实例。 导航到该框架时,不会每次都为该框架创建页面的新实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM