Wpf 依赖项属性的CLR包装器是否可选?

Wpf 依赖项属性的CLR包装器是否可选?,wpf,wrapper,dependency-properties,Wpf,Wrapper,Dependency Properties,我的印象是,依赖属性的CLR包装器在WPF下是可选的,并且只对在您自己的代码中设置有用 但是,我创建了一个没有包装器的UserControl,但是一些使用它的XAML在没有包装器的情况下无法编译: namespace MyControlLib { public partial class MyControl : UserControl { public static readonly DependencyProperty SomethingProperty;

我的印象是,依赖属性的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>
意味着它可以编译并运行良好


我错过了什么

您可以在运行时绑定中使用不带包装器的依赖项属性,但要按您的意愿设置属性,您必须具有C#属性,以允许xaml编译器编译您的代码。

如果您在属性上指定名称空间前缀,我相信它将在没有包装器的情况下编译

它们是可选的,但是如果没有它们,属性不会自动显示在XAML设计器中

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

+1,我要补充的是,对于依赖项属性,即使框架并不总是使用它。不幸的是,这对我不起作用。我得到:错误MC3072:属性“MyControl.Something”在XML命名空间“clr命名空间:MyControlLib”中不存在
<ctrl:MyControl ctrl:MyControl.Something="45" />