我想使用泛型创建自定义WPF控件:
public class MyGenericTypeControl<T> : ItemsControl
{
// ...
}
这可能吗?在我最初的实验中,一旦尝试在某处添加此控件,我就会遇到设计时/编译时XAML错误。这并不奇怪,因为构建我的自定义控件需要XAML不提供的其他信息。
有什么想法吗?
答案 0 :(得分:5)
XAML不完全支持(还有?),另见this blog post on MSDN。
答案 1 :(得分:3)
XAML
不支持泛型,您需要创建一个从您的通用控件继承的空非泛型类,并将其与XAML
答案 2 :(得分:0)
您只能用另一种方法来实现(从通用基类继承的非通用控件):
public class BaseControl<T> : Control
{
// base implementation
}
public class MyControl : BaseControl<string>
{
// ...
}
MyConrtrol
的XAML如下所示:
<local:MyControl x:Class="BaseControl"
x:TypeArguments="sys:String"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyNamespace"
xmlns:sys="clr-namespace:System;assembly=System.Runtime">
....
<local:MyControl/>
请注意属性x:TypeArguments="....."
。如果您的类型参数本身是通用的,则可以使用例如以下:
<local:MyControl x:Class="BaseControl"
x:TypeArguments="sys:Tuple(sys:String,sys:Int32)"
...>
代码等同于:
public class MyControl : BaseControl<Tuple<string, int>>
{
// ...
}