c# – 在wpf中限制附加的依赖属性

前端之家收集整理的这篇文章主要介绍了c# – 在wpf中限制附加的依赖属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想只附加一个依赖属性到特定的控件.

如果只是一种类型,我可以这样做:

@H_502_4@public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.RegisterAttached("MyProperty",typeof(object),typeof(ThisStaticWrapperClass)); public static object GetMyProperty(MyControl control) { if (control == null) { throw new ArgumentNullException("control"); } return control.GetValue(MyPropertyProperty); } public static void SetMyProperty(MyControl control,object value) { if (control == null) { throw new ArgumentNullException("control"); } control.SetValue(MyPropertyProperty,value); }

(所以:限制Get / Set-Methods中的控制类型)

但是现在我想允许该属性附加在不同类型的控件上.
您将尝试为这两种新方法添加一个重载,但由于“未知构建错误,发现不明确匹配”,无法编译.

那么我该如何限制我的DependencyProperty到一个选择的控件?
(注意:在我的具体情况下,我需要它为TextBox和ComboBox)

解决方法

Ambiguous match found.

…通常由GetMethod抛出,如果有多个重载,并且没有指定类型签名(MSDN:找到多个指定名称方法).基本上WPF引擎只是寻找一种这样的方法.

为什么不检查方法体中的类型并抛出InvalidOperationException(如果不允许)

请注意,这些CLR-Wrappers不应该在设置旁边包含任何代码,如果在XAML中设置了属性,则会忽略它们,尝试在设置器中抛出异常,如果只使用XAML设置,则不会出现价值.

改用回调:

@H_502_4@public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.RegisterAttached ( "MyProperty",typeof(ThisStaticWrapperClass),new UIPropertyMetadata(null,MyPropertyChanged) // <- This ); public static void MyPropertyChanged(DependencyObject o,DependencyPropertyChangedEventArgs e) { if (o is TextBox == false && o is ComboBox == false) { throw new InvalidOperationException("This property may only be set on TextBoxes and ComboBoxes."); } }

猜你在找的C#相关文章