wpf 依赖属性的值约束
在依赖属性中,值的约束不能单一的从Set方法中操作
public int MyProperty { get { return (int)GetValue(MyPropertyProperty); } set { SetValue(MyPropertyProperty, value); } } // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc... public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(int), typeof(CustomControl1), new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.AffectsMeasure, OnMyPropertyChanged, OnCoerceMyPropertyChanged), new ValidateValueCallback(IsValidValue)); /// <summary> /// 对输入的值做约束 /// </summary> /// <param name="d"></param> /// <param name="baseValue"></param> /// <returns></returns> private static object OnCoerceMyPropertyChanged(DependencyObject d, object baseValue) { Console.WriteLine($"OnCoerceMyPropertyChanged {baseValue}"); var newValue = (int)baseValue; if (newValue > 250) { return 249; } return baseValue; } /// <summary> /// 返回false,则会抛出异常, /// 这里不会参考OnCoerceMyPropertyChanged更改的值,依然为原始的输入, /// 如果使用了OnCoerceMyPropertyChanged 则不需要使用本回调 /// </summary> /// <param name="value"></param> /// <returns></returns> public static bool IsValidValue(object value) { return true; var newValue = (int)value; return newValue < 500; } private static void OnMyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Console.WriteLine($"OnMyPropertyChanged {e.NewValue}"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步