WP7创建自定义选择器/任务

时间:2011-05-25 21:21:55

标签: silverlight windows-phone-7

任何人都知道如何创建自定义选择器?基本上我想要的是导航到一个页面,在该页面上选择一些数据并通过一些EventArg返回一个对象。

类似于任务/选择器在WP7中的工作方式,我现在可以这样做:

CustomChooserTask task = new CustomChooserTask();
task.Completed += new EventHandler<CustomResult>(task_Completed);
task.Show();

2 个答案:

答案 0 :(得分:2)

选择器不是您正在尝试做的正确方法。

任务/启动器/选择器是您的应用程序与手机的核心功能进行交互的一种方式,同时允许用户清楚地了解正在发生的事情。

由于您没有与手机的核心功能或数据进行交互,因此创建一些试图模仿它的东西可能会令人困惑。

满足您的要求的一个简单方法是拥有一个全局变量(或等效的),并使启动(选择器)页面填充该变量。在返回原始(请求)页面时,它可以检查全局变量。不幸的是,没有办法以这种方式在页面之间传回数据。 (至少没有让你的背板操纵变得非常有创意。)

或者,您可以查看ListPickerToolkit中的工作原理并实现类似的内容。

答案 1 :(得分:1)

我知道这有点老了,其他人说这不是个好主意。但我相信有时候能够实现selectrtask是很方便的。一个明显的例子是,如果您希望用户从库中选择一张照片,拍照或在屏幕上绘制一些东西。

这些都需要返回相同的结果,但绘制自己的没有选择器。因此,实现一个可以保持代码简单。你有一个案例陈述,告诉你要激活什么选择器。

无论如何这里是我写的一些代码来创建一个自定义选择任务(它不是100%完成,但它应该给你一个想法):

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Tasks;
using System.Windows.Controls.Primitives;

namespace tasks {


public class imageResult : TaskEventArgs {

    public System.IO.Stream image { get; set; }
}


public class imageChooserTask : ChooserBase<imageResult> {

    public override void Show() {
        Popup p = new Popup();
        p.IsOpen = true;
        imageSelector cs = new imageSelector();
        p.Child = cs;
        p.Closed += new EventHandler(p_Closed);
    }

    void p_Closed(object sender, EventArgs e) {
        Popup p = sender as Popup;
        TaskResult tr = (TaskResult)p.Tag;
        //some logic to add stream
        FireCompleted(sender, new imageResult(), null);
    }


}
}