确定AssociatedObject的实际运行时类型

时间:2013-03-05 02:22:29

标签: c# wpf xaml behavior associated-object

我有一个行为,我想附加到多个控件,并根据他们的类型,我想写逻辑,为此我需要在运行时确定关联对象的类型,我想知道怎么可以我这样做

class CustomBehavior:Behavior<DependencyObject>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        if(AssociatedObject.GetType()==typeof(TextBox))
        {
            //Do Something
        }

        else if(AssociatedObject.GetType()==typeof(CheckBox))
        {
            //Do something else
        }
//....
//...
        else
            //Do nothing
    }
}

这会有用吗?

2 个答案:

答案 0 :(得分:1)

您可以使用is关键字,这将获取类型和派生类型

protected override void OnAttached()
{
    base.OnAttached();
    if(AssociatedObject is TextBox)
    {
        //Do Something
    }

    else if(AssociatedObject is CheckBox)
    {
        //Do something else
    }

答案 1 :(得分:0)

我更喜欢:

if(typeof(TextBox).IsAssignableFrom(AssociatedObject.GetType()))
{
   ...etc
}

这适用于TextBox以及从中派生的任何类。

附注:如果您打算对控件(TextBox,ComboBox等)使用此行为,则最好将其更改为Behavior<FrameworkElement>。这样您就可以访问FrameworkElement(I.E L.I.F.E)的所有常用功能,而无需转换为特定类型。