public partial class MyUserControl : UserControl { public static readonly System.Windows.DependencyProperty CurrentTimeProperty = System.Windows.DependencyProperty.Register("CurrentTime", typeof(DateTime), typeof(MyUserControl), new FrameworkPropertyMetadata(DateTime.Now, OnCurrentTimePropertyChanged, OnCoerceCurrentTimeProperty ), OnValidateCurrentTimeProperty); public DateTime CurrentTime { get { return (DateTime)GetValue(CurrentTimeProperty); } set { SetValue(CurrentTimeProperty, value); } } public MyUserControl() { InitializeComponent(); } private static void OnCurrentTimePropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { MyUserControl control = source as MyUserControl; DateTime time = (DateTime)e.NewValue; } private static object OnCoerceCurrentTimeProperty(DependencyObject sender, object data) { if ((DateTime)data > DateTime.Now) { data = DateTime.Now; } return data; } private static bool OnValidateCurrentTimeProperty(object data) { return data is DateTime; } }The only part I'm still fuzzy on is this:
new FrameworkPropertyMetadata(DateTime.Now, OnCurrentTimePropertyChanged, OnCoerceCurrentTimeProperty ), OnValidateCurrentTimeProperty);The IntelliSense is cryptic. I see 11 overloads of the CTOR, and this is implementation 7. The IntelliSense doesn't show what/how