1

WPF の基本クラスに問題があります。他のウィンドウがこれらのコンポーネントを継承できるように、いくつかの基本要素を持つ基本クラスを作成しようとしています。しかし、基本クラスを継承すると、これらの要素のない空のウィンドウしかありません。理解を深めるために、コードをここに置きます。

using XSoftArt.WPFengine;

namespace XSoftArt
{

    public class WindowBase : Window
    {

    public WindowBase()
    {

    }

}

WindowBase を継承する Windows のコード:

namespace XSoftArt.WPFengine
{
    public partial class NewAbility : WindowBase
    {
        public NewAbility()
        {
            base.ChildForm = this; InitializeComponent();

        }
    }
}

または、誰かが実装された基本クラスとの実用的な例やリンクをwpfに入れることができますか? ありがとう

4

3 に答える 3

3

私はあなたがあなたがしていることを本当にする必要はないと思いますがそれは実行可能です。基本クラスのコンストラクターを呼び出すのを忘れているだけだと思います。

using XSoftArt.WPFengine;

namespace XSoftArt
{

    public class WindowBase : Window
    {

        //call base ctor
        public WindowBase() : base()
        {

        }

    }
}

継承されたクラスからもこれを行う必要があります。

namespace XSoftArt.WPFengine
{
    public partial class NewAbility : WindowBase
    {
        public NewAbility() : base()
        {
            base.ChildForm = this; InitializeComponent();

        }
    }
}

また、XAML定義のビューもある場合は、ビューWindowBaseであることを確認する必要があります。これを行うには、これを変更します。

<Window x:Class="MyApp.MyView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  ...
  >
  <Grid>        
  </Grid>
</Window>

これに:

<local:WindowBase x:Class="MyApp.MyView"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:XSoftArt;"
  ...
  >
  <Grid>        
  </Grid>
</local:WindowBase>

Reflectorでこのクラスを見ると、コンストラクターがWindowクラス独自の「Initialize()」メソッドを呼び出していることがわかります。これにより、多くのことが動き始めます。具体的には、すべてのUIイベントのワークキューであるディスパッチャーに接続しているように見えます。

于 2009-10-29T17:02:06.753 に答える
1

特に、基本クラスの InitializeComponent() メソッドが確実に呼び出されるようにする必要があります。これは、XAML で定義したコントロールを作成する関数です。

コントロールと動作の両方を継承したい場合は、派生クラスを作成することをお勧めしますが、共通のコントロール セットをより柔軟に管理するには、テンプレートを使用することを検討してください。

于 2009-10-29T17:08:34.417 に答える
0

WPFで継承を使用しようとしている方法で継承を使用することはないと思います。

私はあなたの質問に答えるのを試みます。私があなたを正しく理解しているなら、あなたはこのようなことを試みています:

  1. XAMLファイルと分離コードの両方を含むウィンドウを作成しています。
  2. ウィンドウのXAMLに「基本要素」を追加しています...「基本要素」の意味はわかりませんが、ウィンドウにUI要素を追加していると仮定します。
  3. コードビハインドの最初のウィンドウから「派生」する別のウィンドウを作成していますが、問題は、「ベース」ウィンドウからそのウィンドウにUI要素が表示されないことです。

それがWPFで達成したいことである場合、私は個人的に継承のファンではなく、継承を手に負えなくなる危険性を直接目にしたという理由で、個人的には反対することをお勧めします。

代わりに試すことができるのは、「ベース」UI要素をWPFUserControlsに整理することです。このチュートリアルはあなたを正しい方向に導くことができるかもしれません。幸運を!

于 2009-10-29T16:48:43.497 に答える