Предположим, у меня следующий тип DependencyObject:
public class Test : DependencyObject
{
public int Order
{
get { return (int)GetValue(OrderProperty); }
set { SetValue(OrderProperty, value); }
}
public static readonly DependencyProperty OrderProperty =
DependencyProperty.Register("OrderProperty",
typeof(int),
typeof(Test),
new FrameworkPropertyMetadata(6,
new PropertyChangedCallback(OnOrderPropertyChanged),
new CoerceValueCallback(OnCoerceValueCallBack)),
new ValidateValueCallback(OnValidateValueCallBack));
static void OnOrderPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Console.WriteLine("OnOrderPropertyChanged");
}
static object OnCoerceValueCallBack(DependencyObject d, object baseValue)
{
Console.WriteLine("OnCoerceValueCallBack");
return 200;
}
static bool OnValidateValueCallBack(object value)
{
Console.WriteLine("OnValidateValueCallBack");
int iValue = (int)value;
return iValue > 5;
}
}
Когда я создаю экземпляр Test , я вижу, что OnValidateValueCallBack
вызывается дважды, а OnCoerceValueCallBack
- нетназывается на всех.Исходя из того, что я увидел, я предполагаю, что при создании экземпляра WPF вызовет OnValidateValueCallBack
, чтобы проверить, является ли значение по умолчанию действительным, если это так, он будет использовать значение по умолчанию и вообще не будет вызывать CoerceValueCallback
, поэтомуоткуда приходит второй звонок OnValidateValueCallBack
?