【问题标题】:How to create a month-view control in Silverlight如何在 Silverlight 中创建月视图控件
【发布时间】:2009-12-08 20:27:16
【问题描述】:

我需要创建一个类似于月视图控件的前景来显示约会。 (显示一个月中所有日期的网格,工作日垂直对齐。应显示每一天的天数和星期几,约会应显示在正确日期内的列表视图中)

我需要一些关于从哪里开始的输入。

假设 ViewModel 看起来像这样:

    public class MonthViewModel
{
    public List<DateTime> DaysInMonth { get; set; }
    public List<Appointment> Appointments { get; set; }
}
    public class Appointment
{
    public string Title { get; set; }
    public DateTime Start { get; set; }
    public string Description { get; set; }

}

我是否需要手动安排日期和安排约会,或者我可以做得更优雅吗?

我已经尝试了几种绑定方法,但都没有成功。有什么提示吗?

问候拉尔西

【问题讨论】:

  • 从在 SL3 beta 早期尝试它并让它开始工作的痛苦中,我会毫不犹豫地购买商用控件来代替它。这比看起来要困难得多,尤其是以紧凑但基于规则的方式安排多日约会。
  • 安德鲁,同意 - 我发现这项任务比我想象的要难得多。如果我找到一个好的方法,我会发布更新

标签: silverlight wrappanel


【解决方案1】:

几周前我做了这件事。我所做的是创建两个 Silverlight 用户控件,一个用于一天,一个用于一个月。

月份控件使用如下所示的日期控件填充名为 MonthRows 的堆栈面板:

        ViewStartDate = new DateTime(CurrentDate.Year, CurrentDate.Month, 1);
        ViewEndDate = ViewStartDate.AddMonths(1).AddDays(-1);

        while (ViewStartDate.DayOfWeek != System.DayOfWeek.Sunday)
        {
            ViewStartDate = ViewStartDate.AddDays(-1);
        }
        while (ViewEndDate.DayOfWeek != System.DayOfWeek.Saturday)
        {
            ViewEndDate = ViewEndDate.AddDays(1);
        }

        DateTime tmpDate = ViewStartDate;
        while (tmpDate <= ViewEndDate)
        {
            StackPanel stack = new StackPanel()
            {
                Orientation = Orientation.Horizontal
            };

            for (int i = 0; i < 7; i++)
            {
                stack.Children.Add(new ucDay(tmpDate.Year, tmpDate.Month, tmpDate.Day, EventFunc, CurrentDate));
                tmpDate = tmpDate.AddDays(1);
            }
            MonthRows.Children.Add(stack);
        }

ucDay 构造函数接受年、月、日、委托函数指针(用于处理点击事件)和当前选定的日期作为参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多