WPF Dependency property ,overrideMetaData issue
Seems to know,because MyStackPanel2 has register, so will new a property, _metaMap has no base type's metadata, so if we use :
static MyStackPanel2()
{
MyStackPanel.IntDataProperty.OverrideMetadata(typeof(MyStackPanel2), new FrameworkPropertyMetadata(9));
MyStackPanel.MinDateProperty.AddOwner(typeof(MyStackPanel2), new FrameworkPropertyMetadata(DateTime.Now, onMindateChange2));
}
The new metadata will merge basetype's metadata! For attached property, although register’s metaData is only stored at defaultmetaData, _metaMap have no, but overrideMetaData method will add new metadata to _metaMap, and will do merge too.
And,MyStackPanel2 is sub class of MyStackPanel, so the merge will happen, if not sub class ,the merge will not happen either.like the code below:
public partial class UserControlLabel : Label
{
static UserControlLabel()
{
MyStackPanel.MinDateProperty.OverrideMetadata(typeof(UserControlLabel), new FrameworkPropertyMetadata(DateTime.Now, onMinDateChangeUserControl));
}
public DateTime MinDate
{
get { return (DateTime)GetValue(MyStackPanel.MinDateProperty); }
set { SetValue(MyStackPanel.MinDateProperty, value); }
}
}
2.
This PropertyFromName hashtable is mainly use by the xaml->code process
which can be found by analyzing the DependencyProperty.FromName() method using reflector’s “use by” function..
3. attched property register not use overridemetedata, because its ownertype can not be dependencyObject, _metadataMap need to use
DependencyObjectType.typeId as key.