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

Silverlight/WPF Calendar how to get visible dates

我想获取日历中的可见日期,例如下图我想获取 2015 年 6 月 28 日2015 年 8 月 8 日

我在事件 DisplayDateChanged 中得到的全部是

添加日期 = {01/07/2015 00:00:00}(7 月 1 日)

移除日期 = {25/06/2015 00:00:00}(6 月 25 日)

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

那么有什么解决方法或方法来计算或获得我想要的结果吗?

我通过一些问题得到了答案,并对我的日历模板做了一些更改。

我单击了编辑其他模板/编辑 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/