Choose the right base class
UIElement | Layout, Input, Focus and Events |
FrameworkElement | Style, ToolTip, ContextMenu, and etc. |
Control | Template, Foreground, Background, FontSize |
ContentControl | ContentProperty |
HeaderedContentControl | HeaderProperty TabControl, Expander, GroupBox |
ItemsControl | ItemCollection |
Selector | ComboBox, ListBox, ListView, TabControl |
RangeBase | Slider, ProgressBar MinimumProperty, MaximumProperty |
Override the Default Style
static MyCustomControl() { DefaultStyleKeyProperty.OverrideMetadata( typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl)); }
Create a default Style
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:sd="clr-namespace:System.Drawing;assembly=System.Drawing" xmlns:swm="clr-namespace:System.Windows.Media;assembly=PresentationCore"> <Style TargetType="{x:Type local:MyCustomControl}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:MyCustomControl}"> ... </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary>
public static readonly DependencyProperty MyContentProperty = DependencyProperty.Register( nameof(MyContent), typeof(object), typeof(MyCustomControl), new FrameworkPropertyMetadata( null, FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsParentMeasure)); public object MyContent { get => GetValue(MyContentProperty); set => SetValue(MyContentProperty, value); }
'.NET > WPF' 카테고리의 다른 글
Calendar (0) | 2021.12.24 |
---|---|
WPF ContextMenu Tips (0) | 2021.08.15 |
Adorner (0) | 2021.08.15 |
WPF Graphics Rendering (0) | 2021.08.15 |
Routed Event (0) | 2021.08.15 |