为什么这个属性不可见?说无法找到附属物

时间:2011-11-14 21:22:55

标签: c# silverlight xaml behavior

我正在使用附加属性创建行为。行为应该附加到Grid:

public class InteractionsBehavior : Behavior<Grid>
{
    public static readonly DependencyProperty ContainerProperty =
        DependencyProperty.RegisterAttached("Container", typeof(Grid), typeof(Grid), new PropertyMetadata(null));

    public static readonly DependencyProperty InteractionsProviderProperty =
        DependencyProperty.RegisterAttached("InteractionsProvider", typeof(IInteractionsProvider), typeof(Grid), new PropertyMetadata(null, OnInteractionsProviderPropertyChanged));

    public Grid Container
    {
        get { return GetValue(ContainerProperty) as Grid; }
        set { this.SetValue(ContainerProperty, value); }
    }

    public IInteractionsProvider InteractionsProvider
    {
        get { return GetValue(InteractionsProviderProperty) as IInteractionsProvider; }
        set { this.SetValue(InteractionsProviderProperty, value); }
    }

现在当我正在写这样的XAML时,我得到错误:

<Grid Background="White" x:Name="LayoutRoot" 
          Behaviors:InteractionsBehavior.InteractionsProvider="{Binding InteractionsProvider}">
  

错误4属性'InteractionsProvider'在类型上不存在   XML命名空间中的“网格”   'CLR-名称空间:Infrastructure.Behaviors;装配= Infrastructure.SL'。 C:\ MainPage.xaml 11 11 Controls.SL.Test

     

错误1找不到可附加属性“InteractionsProvider”   在类型   'InteractionsBehavior'。 C:\ MainPage.xaml 11 11 Controls.SL.Test

2 个答案:

答案 0 :(得分:3)

您指定它只能由InteractionsBehavior附加(“拥有”)。如果您希望能够将其分配给网格,请将RegisterAttached行更改为:

public static readonly DependencyProperty InteractionsProviderProperty =
        DependencyProperty.RegisterAttached("InteractionsProvider", typeof(IInteractionsProvider), typeof(Grid), new PropertyMetadata(null, OnInteractionsProviderPropertyChanged));

(或者在Grid的类层次结构中使用一些基类...)

答案 1 :(得分:1)

问题在于您所附属性的声明。附加属性有4个部分:名称,类型,所有者类型和属性元数据。您指定InteractionsProvider属性由Grid类型拥有(并因此提供)。事实并非如此。将所有者类型(第三个参数)更改为typeof(InteractionsBehavior)(您声明附加属性的类),切换到静态get / set方法而不是属性(因为您使用的是附加属性,而不是一个依赖属性),它应该按预期工作。