任何人都知道如何创建自定义选择器?基本上我想要的是导航到一个页面,在该页面上选择一些数据并通过一些EventArg返回一个对象。
类似于任务/选择器在WP7中的工作方式,我现在可以这样做:
CustomChooserTask task = new CustomChooserTask();
task.Completed += new EventHandler<CustomResult>(task_Completed);
task.Show();
答案 0 :(得分:2)
选择器不是您正在尝试做的正确方法。
任务/启动器/选择器是您的应用程序与手机的核心功能进行交互的一种方式,同时允许用户清楚地了解正在发生的事情。
由于您没有与手机的核心功能或数据进行交互,因此创建一些试图模仿它的东西可能会令人困惑。
满足您的要求的一个简单方法是拥有一个全局变量(或等效的),并使启动(选择器)页面填充该变量。在返回原始(请求)页面时,它可以检查全局变量。不幸的是,没有办法以这种方式在页面之间传回数据。 (至少没有让你的背板操纵变得非常有创意。)
或者,您可以查看ListPicker
在Toolkit中的工作原理并实现类似的内容。
答案 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);
}
}
}