本文整理汇总了C#中System.Windows.PropertyMetadata.OverrideMetadata方法的典型用法代码示例。如果您正苦于以下问题:C# PropertyMetadata.OverrideMetadata方法的具体用法?C# PropertyMetadata.OverrideMetadata怎么用?C# PropertyMetadata.OverrideMetadata使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Windows.PropertyMetadata
的用法示例。
在下文中一共展示了PropertyMetadata.OverrideMetadata方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RegisterCommon
private static DependencyProperty RegisterCommon(bool isAttached, string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback, bool isReadOnly)
{
var comparer = GetComparer(propertyType);
if (defaultMetadata != null && propertyType.IsValueType && defaultMetadata.DefaultValue == DependencyProperty.UnsetValue)
defaultMetadata = defaultMetadata.OverrideMetadata(Activator.CreateInstance(propertyType), validateValueCallback, comparer);
if (validateValueCallback == null)
{
if (isReadOnly && defaultMetadata == null)
defaultMetadata = GenerateDefaultMetadata(propertyType, comparer);
else if (defaultMetadata != null)
defaultMetadata = defaultMetadata.OverrideMetadata(null, comparer);
}
else if (defaultMetadata != null)
{
var isDefaultValueValid = validateValueCallback(defaultMetadata.DefaultValue);
if (!isDefaultValueValid)
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Default value for '{0}' property is not valid because ValidateValueCallback failed.", name));
defaultMetadata = defaultMetadata.OverrideMetadata(validateValueCallback, comparer);
}
else
{
defaultMetadata = GenerateDefaultMetadata(propertyType, comparer);
var isDefaultValueValid = validateValueCallback(defaultMetadata.DefaultValue);
if (!isDefaultValueValid)
throw new ArgumentException(
string.Format(
CultureInfo.InvariantCulture,
"Cannot automatically generate a valid default value for property '{0}'. Specify a default value explicitly when owner type '{1}' is registering this DependencyProperty.",
name,
ownerType));
defaultMetadata = defaultMetadata.OverrideMetadata(validateValueCallback, comparer);
}
DependencyProperty dp;
// if we do not need extended metadata then fallback to System.Windows.PropertyMetadata.
if (!isReadOnly && validateValueCallback == null
&& defaultMetadata != null && defaultMetadata.CoerceValueCallback == null && !HasSupportedFlags(defaultMetadata.Flags))
{
var simpleMetadata = new System.Windows.PropertyMetadata(defaultMetadata.DefaultValue, defaultMetadata.PropertyChangedCallback);
dp = Register(isAttached, name, propertyType, ownerType, simpleMetadata);
}
else
{
dp = Register(isAttached, name, propertyType, ownerType, defaultMetadata);
RememberMetadata(dp, defaultMetadata);
}
if (isReadOnly)
readonlyDP.Add(dp);
return dp;
}