我正在使用附加属性创建行为。行为应该附加到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
答案 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方法而不是属性(因为您使用的是附加属性,而不是一个依赖属性),它应该按预期工作。