是否有Silverlight周选择器控件?

时间:2010-04-07 22:45:12

标签: silverlight datepicker

我们有一份报告可以比较几周之间的数据,而且这似乎是例外,而不是报告世界中的规则。

我正在寻找一种在Silverlight控件中选择“一周”的优雅方式。我不想花时间自己建造它,所以如果我能买到一个完美无瑕的控件来做这件事会很好。

当然,我可以使用下拉列表,但我希望能够轻松浏览可能数周的数据。有任何现有的控制吗?有任何聪明的方法来使用基本控制来实现我们的目标吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

不,Silverlight SDK,Toolkit,甚至是我看过的大型第三方供应商之一都没有。

答案 1 :(得分:0)

我不知道任何现有的控件。但是,您可以尝试使用具有行为的日历控件将选择内容转换为整周的范围选择。

例如:

<sdk:Calendar HorizontalAlignment="Left"
              Margin="8,8,0,120"
              Width="187">
    <i:Interaction.Behaviors>
        <local:SelectWeekBehaviour />
    </i:Interaction.Behaviors>
</sdk:Calendar>

行为是:

public class SelectWeekBehaviour : Behavior<Calendar>
{
    private void DateChanged(object sender, SelectionChangedEventArgs e)
    {
        UnsubscribeFromSelectionNotifications();

        var selectedDate = AssociatedObject.SelectedDate;

        if (selectedDate.HasValue)
        {
            var dayOfWeek = (int)selectedDate.Value.DayOfWeek;

            var firstDate = selectedDate.Value.AddDays(-dayOfWeek);
            var lastDate = selectedDate.Value.AddDays(6 - dayOfWeek);

            AssociatedObject.SelectedDates.Clear();
            AssociatedObject.SelectedDates.AddRange(firstDate, lastDate);
        }

        SubscribeToSelectionNotifications();
    }

    protected override void OnAttached()
    {
        base.OnAttached();

        AssociatedObject.SelectionMode = CalendarSelectionMode.SingleRange;
        AssociatedObject.FirstDayOfWeek = DayOfWeek.Sunday;

        SubscribeToSelectionNotifications();
    }

    protected override void OnDetaching()
    {
        base.OnDetaching();
        UnsubscribeFromSelectionNotifications();
    }

    private void SubscribeToSelectionNotifications()
    {
        AssociatedObject.SelectedDatesChanged += DateChanged;
    }

    private void UnsubscribeFromSelectionNotifications()
    {
        AssociatedObject.SelectedDatesChanged -= DateChanged;
    }
}

这个行为还没有完全准备就绪,因为我强迫本周在周日开始,以便轻松弄清楚本周的开始和结束。