原文转载自慧都控件网:http://www.evget.com/zh-CN/Info/catalog/18212.html
Mindscape WPF Elements进程控制器提供了一个用于创建、查看、基于项目的日历样式的时间编辑的用户界面。一个进程调度可以基于一天、一周、或是以月来查看,并且提供了用于用户选择的视图和在日期之间导航的的用户界面,你也可以使用进程调度程序来显示约会、任务、预定等等。
示例:
<ms:Scheduler x:Name="SchedulerControl" />
自定义添加和编辑行为:
当用户创建了一个新的进程项目时,调度程序提出了ItemAdded事件,默认情况下,将显示一个子窗口,用户可以编辑新项目(如设置一个名、编辑时间、设置复发)。禁用默认行为,并显示自己“添加项目”的用户界面,来控制添加项目事件。如果你想要显示默认的用户界面是,但是依然需要在项目添加是得到通知,在AddScheduleItemEventArgs设置ShowDefaultEdito为true就行了。
设置进程
通过进程属性,你可以访问进程,查看进程类或者是更多的信息。使用添加项目的方法,来添加项目到进程中,或者是移除项目。
在项目中的每个项目由项目进程所体现,而这里面包含了起始时间、结束时间、项目名称等信息。你也可以创建项目进程的子类来包含一些其他的信息,比如说任务调度的优先级等。
如下所示:
private void AddTryTask()
{
SchedulerControl.Schedule.AddItem(new ScheduleItem
{
StartTime = DateTime.Now.Date.AddHours(8),
EndTime = DateTime.Now.Date.AddHours(9),
Name = "Try WPF Elements"
});
}
保存导入进程:
进程控件不是提供一个内置的方法来存储或导入一个进程,主要是因为进程在通常情况下呢是被存储在数据库里面,允许查询等,所以说存储将依赖于数据库设计,WCF 服务接口等。
若要保存或加载计划,使用 Scheduler.Schedule 属性,读取该附表的内容,以便可以使用 Schedule.Items 属性将它们存储。如果要从存储区加载时填充日程安排,使用 Schedule.AddItem 方法就行了。
下面的代码提供了一个简单的保存和加载使用 XML 示例,这例子可用于在客户端机上独立存储中存储的日程安排。
代码如下:
private static void WriteSchedule(Stream stm, Schedule schedule)
{
XElement element = new XElement("Schedule", schedule.Items.Select(si => new XElement("Item",
new XAttribute("Name", si.Name),
new XAttribute("StartTime", si.StartTime),
new XAttribute("EndTime", si.EndTime),
si.IsRecurring ?
new XElement("Recurrence",
new XAttribute("StartDate", si.RecurrenceInfo.StartDate),
new XAttribute("StartTime", si.RecurrenceInfo.StartTime),
new XAttribute("Duration", si.RecurrenceInfo.Duration),
new XAttribute("EndDate", si.RecurrenceInfo.EndDate),
new XAttribute("EndType", si.RecurrenceInfo.EndType),
new XAttribute("MaxOccurrences", si.RecurrenceInfo.MaxOccurrences),
si.RecurrenceInfo.RecurrencePattern.ToXml()
)
: null
)));
element.Save(stm);
}
private static void ReadSchedule(Stream stm, Schedule schedule)
{
XDocument document = XDocument.Load(stm);
IEnumerable<ScheduleItem> items = document.Elements("Schedule").Elements("Item").Select(e => new ScheduleItem
{
Name = (string)e.Attribute("Name"),
StartTime = (DateTime)e.Attribute("StartTime"),
EndTime = (DateTime)e.Attribute("EndTime"),
RecurrenceInfo = e.Elements("Recurrence").Select(rel => new RecurrenceInfo
(
(DateTime)rel.Attribute("StartDate"),
(TimeSpan)rel.Attribute("StartTime"),
(TimeSpan)rel.Attribute("Duration"),
rel.Elements().First().ParseRecurrencePattern(),
(RecurrenceEndType)(Enum.Parse(typeof(RecurrenceEndType), (string)rel.Attribute("EndType"), true)),
(DateTime)rel.Attribute("EndDate"),
(int)rel.Attribute("MaxOccurrences")
)).FirstOrDefault()
});
schedule.Clear();
foreach (ScheduleItem item in items)
{
schedule.AddItem(item);
}
}