Silverlight / WPF日历如何获取可见日期

时间:2015-06-25 13:34:02

标签: c# wpf silverlight calendar

我希望在我的日历中显示可见日期,例如我想获得以下图片 2015年6月28日 2015年8月8日

enter image description here

DisplayDateChanged 的所有内容都是

AddedDate = {01/07/2015 00:00:00}(7月1日)

RemovedDate = {25/06/2015 00:00:00}(6月25日)

起初我认为 DisplayDateStart DisplayDateEnd 会给我这些信息,但我意识到这些属性不是只读的,而是我将它们设置为其他目的,例如将显示的日期范围。

那么任何变通方法或方法来计算或得到我想要的结果?

1 个答案:

答案 0 :(得分:0)

我通过一些问题得到了答案,并在我的日历模板中进行了一些更改。

我点击编辑其他模板 / 编辑CalendarDayButtonStyle ,然后添加了以下内容:

<Setter Property="Tag" Value="{Binding Path=Date}" />

private void myCal_DisplayDateChanged(object sender, CalendarDateChangedEventArgs e)
        {
            var grid = FindVisualChildByName<Grid>(myCal, "MonthView");
            DateTime? dtBegin = null;
            DateTime? dtEnd = null;

            if (grid != null && grid.Children.OfType<System.Windows.Controls.Primitives.CalendarDayButton>().Any())
            {
                foreach (var button in grid.Children.OfType<System.Windows.Controls.Primitives.CalendarDayButton>().Cast<System.Windows.Controls.Primitives.CalendarDayButton>())
                {
                    if (dtBegin == null)
                        dtBegin = Convert.ToDateTime(button.Tag);
                    else
                        dtEnd = Convert.ToDateTime(button.Tag);
                }
            }
        }

        public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
            {
                var child = VisualTreeHelper.GetChild(parent, i);
                string controlName = child.GetValue(Control.NameProperty) as string;
                if (controlName == name)
                {
                    return child as T;
                }
                else
                {
                    T result = FindVisualChildByName<T>(child, name);
                    if (result != null)
                        return result;
                }
            }
            return null;
        }

Detecting when a day is clicked on the Silverlight Calendar control

https://pwnedcode.wordpress.com/2009/04/01/find-a-control-in-a-wpfsilverlight-visual-tree-by-name/