Почему это свойство не видно? Говорит, что прикрепляемое свойство не может быть найдено - PullRequest
3 голосов
/ 15 ноября 2011

Я создаю поведение с прикрепленными свойствами. Поведение должно привязываться к сетке:

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 ]

3 голосов
/ 15 ноября 2011

Вы указали, что он должен быть доступен только для присоединения ("владения") к InteractionsBehavior. Если вы хотите иметь возможность назначить это сетке, измените строку RegisterAttached на:

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

(Или использовать некоторый базовый класс в Grid иерархии классов ...)

1 голос
/ 15 ноября 2011

Проблема в декларации вашего прикрепленного имущества. Присоединенные свойства состоят из 4 частей: имени, типа, типа владельца и метаданных свойства. Вы указываете, что свойство InteractionsProvider принадлежит (и, следовательно, предоставляется) типу Grid. Это на самом деле не так. Измените тип владельца (третий параметр) на typeof(InteractionsBehavior) (класс, в котором вы объявили присоединенное свойство), переключитесь на статические методы get / set вместо свойства (потому что вы используете присоединенное свойство, а не зависимость собственности), и все должно работать так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...