数年前に WinForms で書いたサイド プロジェクトがあります。WPFをよりよく学ぶために、WPFで書き直したいと思います。理想的には、新しいプロジェクトを作成するのではなく、現在のプロジェクトを変更して WPF で UI を書き直したいと考えています。
私はそれを行うのにいくつか問題があります。私は次のことを行いました(Visual Studio 2008 SP1を使用):
- ターゲット フレームワークを 2.0 から 3.5 に変更しました。
- PresentationCore、PresentationFramework、および WindowsBase の参照を追加しました。
この時点で、何かがおかしいことに気づきました。プロジェクトを右クリックして [追加] を選択したとき | 新しい項目、WPF ウィンドウを作成するオプションがありませんでした。作成できる唯一の WPF クラスは WPF ユーザー コントロールです。他にも WPF プロジェクトがいくつかあったので、App.xaml.* と Window1.xaml.* をそのプロジェクトから自分のプロジェクトにコピーし、必要に応じて更新しました (基本的には、そのプロジェクトの名前空間を自分のプロジェクトの名前空間に変更するだけです)。
次に、Program.cs (以前はメインの WinForm フォームを表示する Main メソッドを含んでいた) を削除し、プロジェクトをビルドしました。Main メソッドがないことを示すエラーが発生しました。
Visual Studio は、このプロジェクトが実際には WinForms アプリであり、WPF アプリではないことを内部的に認識しているようです。WPF プロジェクト (「WPF アプリケーション」を選択して作成) では、アプリケーション プロパティで、アプリケーション クラスのインスタンスをスタートアップ オブジェクトとして設定できます。私の WinForms 変換プロジェクトでは、それはオプションではありません。
テキスト エディターで .csproj ファイルをざっと見てみましたが、プロジェクトが実際には WPF ではなく WinForms であることを Visual Studio に伝えるものは見つかりませんでした。
WinForms プロジェクトを「実際の」WPF プロジェクトにするには、他に何をする必要がありますか? 新しいプロジェクトを作成して現在のプロジェクトを置き換える以外に選択肢はありますか?
更新: .csproj ファイルを詳しく調べたところ、App.xaml がページとして追加されていることがわかりました。
<Page Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
ただし、私の他の WPF プロジェクトでは、それは ApplicationDefinition です。これを変更すると、Application インスタンスを起動オブジェクトとして設定でき、アプリが実行されます。ただし、ユーザー コントロール以外の WPF タイプを作成するオプションはまだありません。