2

Calendarオブジェクト内の aへの参照を取得する必要がありDatePickerます。

私はそれがこれほど簡単だと想像しました:

DatePicker datePicker = new DatePicker();
Calendar calendar = datePicker.Calendar;

Calendarしかし、 にはプロパティがありませんDatePicker

その参照を取得する方法はありますか?

4

2 に答える 2

2

これを試して:

private void Window_ContentRendered(object sender, EventArgs e)
{
    // Find the Popup in template
    Popup MyPopup = FindChild<Popup>(MyDatePicker, "PART_Popup");

    // Get Calendar in child of Popup
    Calendar MyCalendar = (Calendar)MyPopup.Child;

    // For test
    MyCalendar.BlackoutDates.Add(new CalendarDateRange(
            new DateTime(2013, 8, 1),
            new DateTime(2013, 8, 10)
    ));
}

Note:コントロールが完全に読み込まれる場合にのみ使用してください。FindChildそれ以外の場合は、コントロールが見つからず、nullが返されます。この場合、ウィンドウのすべてのコンテンツが正常に読み込まれたというイベントContentRenderedにこのコードを挿入しました。Window

のリスト FindChild<>:

    public static T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject
    {
        if (parent == null)
        {
            return null;
        }

        T foundChild = null;

        int childrenCount = VisualTreeHelper.GetChildrenCount(parent);

        for (int i = 0; i < childrenCount; i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            T childType = child as T;

            if (childType == null)
            {
                foundChild = FindChild<T>(child, childName);

                if (foundChild != null) break;
            }
            else
                if (!string.IsNullOrEmpty(childName))
                {
                    var frameworkElement = child as FrameworkElement;

                    if (frameworkElement != null && frameworkElement.Name == childName)
                    {
                        foundChild = (T)child;
                        break;
                    }
                    else
                    {
                        foundChild = FindChild<T>(child, childName);

                        if (foundChild != null)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    foundChild = (T)child;
                    break;
                }
        }

        return foundChild;
    }
于 2013-08-06T10:01:14.540 に答える