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

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

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

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设置,则不会出现价值.

改用回调:

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#相关文章