2011-05-25 87 views
1

任何人都有线索如何去创建自定义选择器?基本上我想要导航到一个页面,在该页面上选择一些数据并通过一些EventArg返回一个对象。WP7创建自定义选择器/任务

东西类似于WP7如何任务/挑肥拣瘦现在的工作,我可以这样做:

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

回答

2

一个选择器是不是你正在尝试做正确的方法。

任务/启动器/选择器是让您的应用程序与手机的核心功能进行交互的手段,同时允许用户清楚发生的事情。

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

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

或者,你可以看看ListPicker如何在Toolkit工作和实现类似的东西。

+2

+1 - 挑肥拣瘦的建立是为了允许第三方开发者接入到电话的更加受限制的区域。你不需要在同一个应用中做同样的事情。 – keyboardP 2011-05-26 14:59:07

1

我知道这有点老了,其他人都说这不是一个好主意。但我相信有时候能够实施选择任务是很方便的。对我来说,一个明显的例子是,如果你想让用户从那里选择一张照片库,拍一张照片或者在屏幕上画一些东西。

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

反正这里是一些代码,我写了创建自定义choosertask(它不是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); 
    } 


} 
}