3

私はWPFをUserControl使用しており、クラスを継承させ、そのクラスを他のクラスの基本クラスとして使用しようとしています。これを行う方法に関する記事を多数読んだことがありますが (50 を超える賛成票があるこの記事など)、それらはすべて同じことを言っており、どれも機能しません。

私はこのコードを持っています:

namespace MyNamespace {
    // handwritten
    public class BaseControl : UserControl { }

    // generated by the IDE
    public partial class XAMLControl1 : UserControl {
        ...
    }
}

今、その行を次のように変更します

public partial class XAMLControl1 : BaseControl {

そしてXAMLでは、私はそれをから変更します

<UserControl x:Class="MyNamespace.XAMLControl1" ...>
    ...
</UserControl>

<my:BaseControl x:Class="MyNamespace.XAMLControl1"
                xmlns:my="clr-namespace:MyNamespace" ...>
    ...
</my:BaseControl>

そのmy:BaseControl部分に波線の青で下線が引かれているので、ホバーすると IntelliSense が

名前 " BaseControl" は名前空間 " " に存在しませんclr-namespace:MyNamespace

そして、コンパイラは私に奇妙なエラーを与えます

  1. 要素 '<m>' の終了タグが見つかりませんでした。

  2. タイプ ' m' が見つかりませんでした。アセンブリ参照が欠落していないこと、および参照されているすべてのアセンブリがビルドされていることを確認してください。

  3. 名前 " BaseControl" は名前空間 " " に存在しませんclr-namespace:MyNamespace

はい、それは「タイプ ' m' が見つかりませんでした」です。どこでも名前付きの型を使用しようとしている場所がわかりませんm。これは無関係なコンパイラのバグだと思いますが、言及したいと思いました。BaseControlまた、タイプが名前空間に存在することは間違いありませんMyNamespace。を入力した後、インテリセンスは何も提案しませんmy:

この問題を解決するにはどうすればよいですか? Windows デスクトップ (7) 用に Visual Studio 2012 Express を使用しています。

4

3 に答える 3

3

別のdllを使用して独自の BaseControl を使用する必要があるようです。xamlファイルを開始すると、my 名前空間の使用が開始され、後でxamlで宣言します。宣言前のStaticResourceを使いたい場合も同様です。ただし、 BaseControl を別のプロジェクトに分離して新しいdllを取得すると、使用する前にコンパイルされます。

于 2012-10-25T04:31:17.763 に答える
2

同じコンパイラ メッセージで同じ問題に直面したときに、この質問を見つけました。議論の中で何かを見逃したのかもしれませんが、私にとっての解決策は、実装する Dll 仕様を次のように追加することでした。

xmlns:my="clr-namespace:MyNamespace;assembly=MyDll"
于 2013-10-05T10:20:23.170 に答える
0

個別のdllは必要ありません。実際には本当に簡単です

namespace MyNameSpace.UserControls
{
      public class BaseControl : UserControl { //all the good common stuff... } 
}

それから

namespace MyNameSpace.UserControls
{
      public sealed partial class DerivedControl: BaseControl { //your specific stuff... } 
}

次に (DerivedControl の場合)

<local:BaseControl x:Class="MyNameSpace.UserControls.DerivedControl"
                                   xmlns:local="using:MyNameSpace.UserControls"

(注、これは、一致する xamlファイルのない基本クラス用です)

.xaml ファイル (Silverlight) で別の基本クラスを指定する方法を参照してください。

于 2014-02-18T16:13:23.257 に答える