我正在尝试创建一个继承自泛型类的UserControl。它不直接从泛型类继承,而是通过不使用泛型的中间类继承。这在运行时编译并运行,但我在设计时遇到错误。
这是我的通用父类:
Public Class GenericParent(Of T)
Inherits UserControl
End Class
这是我的非通用父类:
Public Class NonGenericParent
Inherits GenericParent(Of String)
End Class
这是我的XAML:
<local:NonGenericParent x:Class="SilverlightApplication5.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SilverlightApplication5"
Width="400" Height="300">
<StackPanel>
<Button Content="Hello"/>
</StackPanel>
</local:NonGenericParent>
IntelliSense解析器出现以下错误:
就好像IntelliSense无法通过GenericParent类查看继承树。我已经尝试直接在SilverlightApplication5.Page类,NonGenericParent类上指定ContentPropertyAttribute,但它不起作用。
我已经读过Silverlight 2.0中不支持TypeArguments属性。这就是为什么我创建了中间NonGenericParent类。
如果有人有任何想法如何消除这些错误,我会很想听到它们。
更新:我们已经开通了MSFT的支持服务单,无论解决方案是什么,我都会更新。
答案 0 :(得分:3)
我们收到微软的消息称,未来的版本不太可能修复此问题。在他们试图找到负责任的团队后出现问题之后,看来这个问题属于他们的WPF开发者组,这是“不会修复它”的答案来源。
与此同时,我们更新了我们的代码,以便从父类中抽出泛型,直到我猜XAML 2009.
答案 1 :(得分:1)
不确定silverlight,但是这会在c#中按预期编译并运行:
class GenericObject[T] : UserControl
{
}
class StaticObject : GenericObject[Int32]
{
public Int32 wide { get { return this.Width; } }
}
private void Form1_Load(object sender, EventArgs e)
{
StaticObject so = new StaticObject();
this.Text = so.wide.ToString();
}
因此,如果它针对clr编译,它应该可以正常工作。
可能只是你建议的一个智能感知错误。通常我建议不要忽略编译器警告,但在这种情况下,似乎警告无效。
编辑:带方括号的替换尖括号导致SO剥离它们。
答案 2 :(得分:0)
尽管处于2.0银光(特别是针对silverlight的VS2008调整)仍然非常年轻。 IDE中还有一些怪癖。
即使成功建造后你还有问题吗?
答案 3 :(得分:0)
此博文似乎与您的问题有关:
对于Silverlight,似乎必须有3个类才能实现。