Являются ли оболочки CLR для свойств зависимости необязательными или нет? - PullRequest
4 голосов
/ 23 сентября 2011

У меня сложилось впечатление, что оболочки CLR для свойств зависимостей являются необязательными в WPF и просто полезны для настройки в вашем собственном коде.

Однако я создал UserControl без оболочек, но некоторые XAML, которые используютбез них он не скомпилируется:

namespace MyControlLib
{
    public partial class MyControl : UserControl
    {
        public static readonly DependencyProperty SomethingProperty;

        static MyControl()
        {
            SomethingProperty = DependencyProperty.Register("Something", typeof(int), typeof(MyControl));
        }
    }
}

Использование XAML:

<Window  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:ctrl="clr-namespace:MyControlLib;assembly=MyControlLib">

   <ctrl:MyControl Something="45" />

</Window>

Попытка скомпилировать дает:

ошибка MC3072: свойство 'Something'не существует в пространстве имен XML' clr-namespace: MyControlLib '.Line blah Position blah.

Добавление оболочки CLR в MyControl.xaml.cs, например:

public int Something
{
    get { return (int)GetValue(SomethingProperty); }
    set { SetValue(SomethingProperty, value); }
}

, означает, что все компилируется и работает нормально.

Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 23 сентября 2011

Вы можете использовать свойства зависимостей без оберток внутри привязок времени выполнения, но для установки требуемого свойства у вас должно быть свойство C #, чтобы компилятор xaml мог компилировать ваш код.

1 голос
/ 23 сентября 2011

Я полагаю, что он будет компилироваться без оболочек, если вы укажете префикс пространства имен в свойстве.

Они являются необязательными, но без них свойство не отображается в конструкторе XAML автоматически

<ctrl:MyControl ctrl:MyControl.Something="45" />
...