我正在尝试创建一个继承自泛型类的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解析器出现以下错误:

  1. 在'NonGenericParent'类型中找不到属性'Width'。
  2. 在'NonGenericParent'类型中找不到属性'Height'。
  3. “NonGenericParent”类型不支持直接内容。
  4. 就好像IntelliSense无法通过GenericParent类查看继承树。我已经尝试直接在SilverlightApplication5.Page类,NonGenericParent类上指定ContentPropertyAttribute,但它不起作用。

    我已经读过Silverlight 2.0中不支持TypeArguments属性。这就是为什么我创建了中间NonGenericParent类。

    如果有人有任何想法如何消除这些错误,我会很想听到它们。

    更新:我们已经开通了MSFT的支持服务单,我将根据他们的解决方案进行更新。

有帮助吗?

解决方案

我们收到微软的消息称,未来的版本不太可能修复此问题。在他们试图找到负责任的团队后出现问题之后,看来这个问题属于他们的WPF开发者组,这是“不会修复它”的答案来源。

与此同时,我们更新了我们的代码,以便从父类中抽出泛型,直到我猜XAML 2009.

其他提示

不确定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银光(特别是针对silverlight的VS2008调整)仍然非常年轻。 IDE中还有一些怪癖。

即使成功建造后你还有问题吗?

此博文似乎与您的问题有关:

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/01/22/known-issue-controls-deriving-from-a-通用碱基类必须待在-单独-assembly.aspx

对于Silverlight,似乎必须有3个类才能实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top