加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:18:44 所属栏目:百科 来源:网络整理
导读:我想只附加一个依赖属性到特定的控件. 如果只是一种类型,我可以这样做: public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.RegisterAttached("MyProperty",typeof(object),typeof(ThisStaticWrapperClass));public stati
我想只附加一个依赖属性到特定的控件.

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

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.");
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读