我认为依赖属性的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:XML命名空间'clr-namespace:MyControlLib'中不存在属性'Something'。行等等等等等等等等。
在MyControl.xaml.cs中添加CLR包装器,如:
public int Something
{
get { return (int)GetValue(SomethingProperty); }
set { SetValue(SomethingProperty, value); }
}
意味着它所有编译和工作正常。
我错过了什么?
答案 0 :(得分:4)
您可以在运行时绑定中使用不带包装器的依赖项属性,但是要设置属性,您必须具有C#属性以允许xaml编译器编译代码。
答案 1 :(得分:1)
我相信如果在属性上指定名称空间前缀,它将在没有包装器的情况下进行编译。
它们是可选的,但没有它们,属性不会自动显示在XAML设计器中
<ctrl:MyControl ctrl:MyControl.Something="45" />