У меня сложилось впечатление, что оболочки 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); }
}
, означает, что все компилируется и работает нормально.
Чего мне не хватает?