0

私のテストでは、次のような単純なクラスを作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace Test
{
    public class MyCustomWindow: Window
    {

    }
}

このクラスは dll にコンパイルされます。別のプロジェクトで、このカスタム ウィンドウを次のように使用しようとしました。

<Custom:MyCustomWindow x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Custom="clr-namespace:Test;assembly=Test"
    Title="MainWindow" Height="600" Width="1210" WindowState="Maximized" >

   <Grid Background="Blue">
       <Button Content="Button" HorizontalAlignment="Left" Margin="457,212,0,0" VerticalAlignment="Top" Width="75"/> 
   </Grid>

このことはエラーなしでコンパイルされ、カスタム ウィンドウが App.xaml ファイルの "StartupUri" (読み込まれた最初のウィンドウを定義する) によって開かれたときにうまく機能します。

ただし、StartupUri で他のウィンドウを読み込むように設定すると、次のようになります。

MainWindow m = new MainWindow();
m.Activate();
m.Show();
this.Close();

CustomWindow が開きますが、コンテンツ、ボタン、青いグリッド、さらにはタイトルもありません。

回避策はありますか?StartupUri と同じ動作で Window を開くにはどうすればよいですか?

編集:

MainWindow (または MyCustomWindow から派生したウィンドウ) は、コンテキストに存在しないため、コンストラクターにメソッド InitializeComponent() を持つことができないことに気付きました。不思議なことに、StartupUri を使用すると、これがなくても正常にコンテンツが読み込まれます。

編集2:

MyCustomWindowにInitializeComponent()メソッドを入れられないために問題が発生していると思います。これは、MainWindow を StartupUri に正常にロードできる理由を説明しています。xaml ファイルから直接ロードしているため、InitializeComponent を必要とせずにコンテンツを解析しています。

IComponentConnector インターフェイスの実装について考え始めましたが、これを行う方法がわかりません。

編集3:

ファイル MainWindow.xaml.cs の分離コードは次のとおりです。

using Test;

namespace TestingCustomWindow
{
    public partial class MainWindow : MyCustomWindow
    {
        public MainWindow()
        {
              // Cannot use InitializeComponent here
        }
    }
}
4

2 に答える 2

1

Visual Studio を使用して新しいウィンドウを追加し、:Window を :MyCustomWindow に置き換えてください。initializecomponent を取得します。xaml の CustomWindow タグでウィンドウ タグも更新する必要があります。

回答として追加して、他の人が使用できるようにします。

ありがとう

于 2013-08-31T04:27:09.173 に答える
1

コンストラクタはこのように見える必要があると思います

public class MyCustomWindow: Window
{
    InitializeComponent();
}
于 2013-08-30T06:11:50.620 に答える