• Metro App中搜索和共享数据的使用


    本文主要介绍基于XAML+C#实现Search Contract和Share Contract功能。通常我们在Windows 8中进行搜索(使用快捷键windows图标+Q),下面我们就一一介绍实现的步骤。

    1.首先我们介绍搜索功能的实现

      1)搜索合约声明:

      我们打开上面提到的示例程序,并打开Package.appxmanifest文件,选择声明选项卡,如下图(红色矩形中的选择),并找到选择搜索声明,然后添加:

      然后我们部署应用程序到计算机上。部署完毕之后,按Windows+Q组合键,可以看到,我们的示例程序已经在搜索面板中了。如果这里不添加搜索声明的话,在搜索面板中是看不到的。

      2)搜索的激活
        打开App.xml.cs文件,在其中添加如下方法:

            protected async  override void OnSearchActivated(SearchActivatedEventArgs args)
            {

             string data = args.QueryText;

         //  添加自己的方法,将输入的关键字传到应用里面去,进行搜索  
                  if (args.PreviousExecutionState == ApplicationExecutionState.NotRunning)
                  {               
                        await PageStart(args,data);    //App.xml.cs中定义的私有方法,下面有介绍
                        return;
                  }
                  PageUpdate(data);          ////App.xml.cs中定义的私有方法,下面有介绍

      }

    注意:原来的方法中是没有红色标记的部分,这里是因为要使用异步(await),所以需要添加.

      当应用程序以显示搜索结果为目的被激活时,该方法会被调用,也就是说,从搜索面板中输入内容,然后回车可以激活该方法。

    2.共享功能的实现

      1)共享合约声明:

      我们打开上面提到的示例程序,并打开Package.appxmanifest文件,选择声明选项卡,如下图(红色矩形中的选择),并找到选择共享声明,然后添加:

    注意上面的红色叉叉,那是因为我们没有设置共享数据的类型而引起的错误,在这里我的应用程序需要使用的是Text类型的,因此我选择Text类型,如下图所示:

    下面我们就可以打开共享面板,进行共享操作,但是在这之前,还需要实现共享的激活。

      2)共享的激活

       打开App.xml.cs文件,在其中添加如下方法:

            protected async override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
            {
                string data = await args.ShareOperation.Data.GetTextAsync();
                if (args.PreviousExecutionState == ApplicationExecutionState.NotRunning)
                {              
                    await PageStart(args,data);  //自定义的方法,实现应用程序在不同状态下的操作
                    return;
                }
                PageUpdate(data);    ////自定义的方法,实现应用程序在不同状态下的操作
            }

     注:App.xaml.cs中用到的自定义方法

            /// <summary>
            /// 程序启动时初始化页面
            /// </summary>
            /// <param name="args"></param>
            /// <returns></returns>
            private async Task PageStart(IActivatedEventArgs args,string data)
            {
                Frame rootFrame = Window.Current.Content as Frame;          
                if (rootFrame == null)
                {
                    rootFrame = new Frame();
                    if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
                    {
                        //TODO: 从之前挂起的应用程序加载状态
                    }
                 }          

                if (Window.Current.Content == null)
                {
                    rootFrame = new Frame();
                    rootFrame.Navigate(typeof(MainPage));
                    Window.Current.Content = rootFrame;
                }
                Window.Current.Activate();
            }

            private  void PageUpdate(string data)
            {
                Frame rootFrame = Window.Current.Content as Frame;         
                if (rootFrame == null)
                {
                    rootFrame = new Frame();    

         }
                if (rootFrame.Content == null)
                {
                    if (!rootFrame.Navigate(typeof(MainPage), data))
                    {
                        throw new Exception("Failed to create initial page");
                    }
                }
                else
                {
                    MainPage page = rootFrame.Content as MainPage;
                    if (page == null)
                    {
                        page = new MainPage();
                        rootFrame.Content = page;
                    }
                    page.SearchKey(data);  //该方法是我词典页面中公开的方法,作用时查询传入的单词,然后显示出来。公开该方法主要是实现共享时,对单词的查询
                }
                Window.Current.Content = rootFrame;
                Window.Current.Activate(); 
            }
        }

     以上就实现了搜索和共享功能,程序中的自定义方法,根据不同的程序自己进行修改。

    另外可以参考:

    http://www.devdiv.com/Windows_8_Metro_App开发_12_Windows_8_中搜索合约的使用-thread-131730-1-1.html

    http://www.silverlightchina.net/html/windows8/study/2012/0621/16882.html

    http://www.silverlightchina.net/html/windows8/study/2012/0621/16880.html

  • 相关阅读:
    hdu5784 极角排序+two point
    极角排序理解
    计算多边形的面积模板
    18年CUG校赛--恶魔的序列
    二分图匹配模板
    POJ 2342 Anniversary party
    蓝桥杯真题-小计算器
    第八届蓝桥杯省赛真题题解
    Django具体操作(四)
    网络爬虫(三)
  • 原文地址:https://www.cnblogs.com/akwwl/p/2779605.html
Copyright © 2020-2023  润新知