【问题标题】:OnShareTargetActivated on Windows10Windows 10 上的 OnShareTargetActivated
【发布时间】:2016-01-10 20:30:26
【问题描述】:

我想从外部环境中获取文本。

 protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
    {
        var frame = new Frame();
        frame.Navigate(typeof(Pages.WorkPage), args.ShareOperation);

        Window.Current.Content = new MainPage(frame);
        Window.Current.Activate();
    }

我的主页构造器:

 public MainPage(Frame frame)
    {
        this.InitializeComponent();
        this.splitView.Content = frame;

        ((Frame)splitView.Content).Navigate(typeof(Pages.WorkPage));
    }

.. 和 OnNavigatedTo 在我的 WorkPage 中像这样

   protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (e.Parameter == null) return;

        var shareOperation = (Windows.ApplicationModel.DataTransfer.ShareTarget.ShareOperation)e.Parameter;
        if (shareOperation.Data.Contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.Text))
            txtMessages.Text = await shareOperation.Data.GetTextAsync();
    }

如何更改OnShareTargetActivated 以使我的OnNavigatedTo 正常工作?

【问题讨论】:

    标签: c# navigation windows-phone-8.1 share windows-10


    【解决方案1】:

    您正在尝试加载MainPage 并将其frame 导航到WorkPage,同时将共享文本传递给WorkPage。为此,您无需将新的Frame 传递给MainPage,当页面加载并成为父框架的当前源时,将调用Page.OnNavigatedTo 方法。所以你可以导航MainPage的框架,并在MainPageOnNavigatedTo方法中传递共享文本,在OnShareTargetActivated你可以导航到MainPage

    您可以像这样更改OnShareTargetActivated

    protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
    {
        Frame rootFrame = Window.Current.Content as Frame;
        if (rootFrame == null)
        {
            // Create a Frame to act as the navigation context and navigate to the first page
            rootFrame = new Frame();
    
            // Place the frame in the current Window
            Window.Current.Content = rootFrame;
        }
        rootFrame.Navigate(typeof(MainPage), args.ShareOperation);
        Window.Current.Activate();
    }
    

    MainPage这样的构造器:

    public MainPage()
    {
        this.InitializeComponent();
    
        //this.splitView.Content = frame;
    
        //((Frame)splitView.Content).Navigate(typeof(WorkPage));
    }
    

    像这样添加MainPage 中的OnNavigatedTo

    protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (e.Parameter is Windows.ApplicationModel.DataTransfer.ShareTarget.ShareOperation)
        {
            var shareOperation = (Windows.ApplicationModel.DataTransfer.ShareTarget.ShareOperation)e.Parameter;
            if (shareOperation.Data.Contains(Windows.ApplicationModel.DataTransfer.StandardDataFormats.Text))
            {
                var data = await shareOperation.Data.GetTextAsync();
                ((Frame)splitView.Content).Navigate(typeof(WorkPage), data);
            }
        }
        else
        {
            ((Frame)splitView.Content).Navigate(typeof(WorkPage));
        }
    }
    

    像这样更改WorkPageOnNavigatedTo

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (e.Parameter != null)
        {
            var data = e.Parameter;
            txtMessages.Text = data.ToString();
        }
    }
    

    顺便问一下,为什么您为这个问题添加了 Windows Phone 8.1 标签? SplitView 在 WP8.1 中不存在。

    【讨论】:

      猜你喜欢
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2021-09-29
      • 1970-01-01
      • 2016-11-02
      • 2017-10-05
      相关资源
      最近更新 更多