【问题标题】:Is there a Silverlight week picker control?是否有 Silverlight 周选择器控件?
【发布时间】:2010-04-07 22:45:11
【问题描述】:

我们有一份报告可以比较几周之间的数据,这似乎是例外情况,而不是报告领域的规则。

我正在寻找一种在 Silverlight 控件中选择“一周”的优雅方式。我不想花时间自己构建它,所以如果我能买一个做这件事的精良控件就好了。

当然,我可以使用下拉列表,但我想要一种方法来轻松浏览可能数年的数周。有任何现有的控件吗?有什么巧妙的方法可以使用基本控件来实现我们的目标?

谢谢!

【问题讨论】:

标签: silverlight datepicker


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    例如:

    <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;
        }
    }
    

    这种行为还没有完全准备好生产,因为我强迫一周从星期日开始,以便于弄清楚一周的开始和结束。

    【讨论】:

    • 这似乎只适用于 Blend 而不仅仅是普通的旧 Silverlight。
    • @jpierson 证明?我从 Silverlight 项目中复制并粘贴出来,效果很好。
    • 它对我不起作用,而且我没有安装 Expression Blend。此外,在研究它时,我发现 Behavior 类位于 System.Windows.Interactivity.dll 中,它是一个 Blend 程序集。请参阅 Expression Blend Studio 产品下列出的 Behavior 文档 (silverlightshow.net/items/…),本教程解释了更多信息 (silverlightshow.net/items/…) 并指示您下载 Expression Blend 以使用 Behaviors。
    • System.Windows.Interactivity 最初是作为 Blend SDK 的一部分发布的。它不是 Blend 本身的一部分,现在有多种获取该 dll 的方法,例如。 Silverlight 工具包、MvvmLight、Caliburn、Prism
    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多