ContentControl是最簡單的TemplatedControl,而且它在UWP出場頻率很高。ContentControl和Panel是VisualTree的基礎,可以說幾乎所有VisualTree上的UI元素的父節(jié)點中總有一個ContentControl或Panel。
因為ContentControl很簡單,如果只實現ContentControl最基本功能的話很適合用來做TemplatedControl的入門。這次的內容就是模仿ContentControl實現一個模板化控件MyContentControl,直接繼承自Control。
1. 定義屬性
/// <summary>/// 獲取或設置Content的值/// </summary> public object Content { get { return (object)GetValue(ContentProperty); } set { SetValue(ContentProperty, value); } }/// <summary>/// 標識 Content 依賴屬性。/// </summary>public static readonly DependencyProperty ContentProperty = DependencyProperty.Register("Content", typeof(object), typeof(MyContentControl), new PropertyMetadata(null, OnContentChanged));private static void OnContentChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args){ MyContentControl target = obj as MyContentControl; object oldValue = (object)args.OldValue; object newValue = (object)args.NewValue; if (oldValue != newValue) target.OnContentChanged(oldValue, newValue); }protected virtual void OnContentChanged(object oldValue, object newValue){ }/// <summary>/// 獲取或設置ContentTemplate的值/// </summary> public DataTemplate ContentTemplate { get { return (DataTemplate)GetValue(ContentTemplateProperty); } set { SetValue(ContentTemplateProperty, value); } }/// <summary>/// 標識 ContentTemplate 依賴屬性。/// </summary>public static readonly DependencyProperty ContentTemplateProperty = DependencyProperty.Register("ContentTemplate", typeof(DataTemplate), typeof(