2

ジェネリック クラスから継承する 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. プロパティ「Width」がタイプ「NonGenericParent」に見つかりませんでした。
  2. プロパティ「高さ」がタイプ「NonGenericParent」に見つかりませんでした。
  3. タイプ 'NonGenericParent' は直接コンテンツをサポートしていません。

これは、IntelliSense が GenericParent クラスを超える継承ツリーを参照できないかのようです。SilverlightApplication5.Page クラス、NonGenericParent クラスで ContentPropertyAttribute を直接指定しようとしましたが、機能しません。

TypeArguments 属性が Silverlight 2.0 でサポートされていないことを読みました。そのため、中間の NonGenericParent クラスを作成しました。

これらのエラーを黙らせる方法を誰かが知っているなら、ぜひ聞いてみたいと思います。

更新: MSFT でサポート チケットをオープンしました。解決策が何であれ、これを更新します。

4

4 に答える 4

3

Microsoft から、これが将来のバージョンで修正される可能性が低いという報告を受けました。彼らが責任あるグループを見つけようとして問題を跳ね返した後、この問題は WPF 開発者グループに属しているようであり、そこから「修正しない」という回答が得られました。

それまでの間、XAML 2009 と推測されるまで、コードを更新して、親クラスからジェネリックを削除しました。

于 2009-01-12T18:39:06.770 に答える
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が削除されます。

于 2008-12-30T17:02:00.143 に答える
0

このブログ投稿はあなたの問題に関連しているようです:

http://blogs.msdn.com/b/wpfsldesigner/archive/2010/01/22/known-issue-controls-deriving-from-a-generic-base-class-must-be-in-separate-assembly. aspx

Silverlight の場合、これが機能するには 3 つのクラスが必要なようです。

于 2011-11-10T22:18:34.440 に答える
0

Silverlight は 2.0 ですが (特に VS2008 による Silverlight の調整は) まだ非常に新しいものです。IDEのものにはまだ癖があります。

ビルドが成功した後でもまだ問題がありますか?

于 2008-12-30T16:45:48.490 に答える