Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 通用用户控件和通用依赖属性是否可能?_Wpf_Generics_Dependency Properties_Initializecomponent - Fatal编程技术网

Wpf 通用用户控件和通用依赖属性是否可能?

Wpf 通用用户控件和通用依赖属性是否可能?,wpf,generics,dependency-properties,initializecomponent,Wpf,Generics,Dependency Properties,Initializecomponent,我有一个抽象泛型类,它定义了一个泛型依赖属性,其类型将由子类化类定义。不知何故,此属性未被识别为依赖项属性,因此在运行时绑定到此属性时会收到错误消息。此外,在编译期间,构造函数不能调用InitializeComponent。为什么呢 通用抽象类MyClass: 抽象公共类MyClass:UserControl{ 受保护的MyClass(){ InitializeComponent();//有一个错误:找不到 } 抽象受保护的源代码; 已更改私有静态无效数据集 (DependencyObject

我有一个抽象泛型类,它定义了一个泛型依赖属性,其类型将由子类化类定义。不知何故,此属性未被识别为依赖项属性,因此在运行时绑定到此属性时会收到错误消息。此外,在编译期间,构造函数不能调用
InitializeComponent
。为什么呢

通用抽象类
MyClass

抽象公共类MyClass:UserControl{
受保护的MyClass(){
InitializeComponent();//有一个错误:找不到
}
抽象受保护的源代码;
已更改私有静态无效数据集
(DependencyObject d,DependencyPropertyChangedEventArgs e){
var myClassObj=(MyClass)d;
myClassObj.DataContext=myClassObj.ListSource;
}
//在运行时导致绑定错误=>DP(具体子类的)
//未被识别为依赖项属性
公共静态只读从属属性DPProperty=
从属属性。寄存器(
“DP”,
类型(T),
类型(MyClass),
新属性元数据(null,DPChanged));
公共T-DP{
获取{return(T)GetValue(DPProperty);}
set{SetValue(DPProperty,value);}
}
}
相应的XAML:


一个具体的子类
MySubClass

public分部类MySubClass:MyClass{
公共MySubClass(){
InitializeComponent();//另一个错误:找不到
}
受保护列表列表源{
获取{return new List();}//只是一个伪值
}
}
相应的XAML:



另外,我也不太确定部分内容是否正确-R建议删除这些关键字。

我认为问题可能是你写的是typeof(MyClass),应该是typeof(MyClass)我认为你的代码有几处错误,但首先,让我在本文中解释一下
部分

partial
用于在单独的文件中声明一个类。当VisualStudio从
MySubClass.xaml
创建一个
MySubClass.g.cs
和一个
分部类MySubClass
(顺便说一句,这里声明了方法
InitializeComponent
)时,您需要两次这个类声明,因此要编译这个类,您需要
分部
关键字

现在让我们来谈谈剩下的:XAML和泛型在一起做得不好,这意味着:一点也不好。您的“对应XAML”正在声明一个
MyClass
。但是不存在没有泛型参数的
MyClass
。此时,您可以将
x:Class=“Path.of.Namespace.MyClass”
更改为
x:Class=“Path.of.Namespace.MySubClass”
,这应该是可行的

但是现在接下来的事情是:您希望如何访问xaml中的dependecy属性?它是泛型类型中的静态成员,因此必须在代码中这样指定它:
MyClass.DPProperty
。问题再次出现:在xaml中不能这样做


为了解决您的问题,最好告诉我们您想要完成什么

这里类似的问题可能会有所帮助:您在代码隐藏中从ListView继承,并且拥有声称您从UserControl继承的XAML,这无法工作…@H.B.啊,抱歉,示例代码错误。我刚刚更新了。谢谢你的解释。实际上,我试图实现的目标也可以不使用泛型。我只是想避免在每个子类中重新定义依赖项属性——现在我坚持使用更详细的解决方案(不使用泛型)。