15

数年前に WinForms で書いたサイド プロジェクトがあります。WPFをよりよく学ぶために、WPFで書き直したいと思います。理想的には、新しいプロジェクトを作成するのではなく、現在のプロジェクトを変更して WPF で UI を書き直したいと考えています。

私はそれを行うのにいくつか問題があります。私は次のことを行いました(Visual Studio 2008 SP1を使用):

  1. ターゲット フレームワークを 2.0 から 3.5 に変更しました。
  2. 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 タイプを作成するオプションはまだありません。

4

4 に答える 4

30

プロジェクトファイルの何がVisualStudioにどのタイプのプロジェクトが使用されているかを通知するかどうかはわかりませんが、「ProjectTypeGuids」が重要だと思います

私のWPFプロジェクトには次のものがあります。

<ProjectTypeGuids>
   {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};
   {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>

これが私が見つけたリンクで、GUIDとそれらが表すプロジェクトの種類を説明しています。「60DC」で始まるGUIDが、WPFアプリケーションのリンクのリストと一致していることがわかります。

于 2009-01-16T15:52:12.777 に答える
24

Sailing Judo の答えは、WinForms プロジェクトを WPF に変換するのに役立ちましたが、何が必要かを詳しく説明していませんでした。

  1. 変換するプロジェクトのファイルを開きcsprojます。
  2. 文字列を検索します<ProjectTypeGuids>- ほとんどの場合、存在しません。
  3. プロジェクトファイルのタグ内に以下を追加してください。複数のPropertyGroupタグがある場合は、Condition属性のないものを使用してください (例: デフォルトのプロパティ)。

    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

  4. 保存 - プロジェクトを開いている場合、VS はプロジェクトをリロードするように求めます。

私が見てテストした結果、WPF WindowsWinForms を簡単に追加できるようになりました。古い W​​inForms も問題なく動作します。

于 2009-04-29T14:56:58.850 に答える
1

悲しいことにいいえ。

WPF と Windows フォーム プロジェクトはあまり互換性がありません。

  • クラス ライブラリにできるだけ多くのうるさいロジック コードを抽出してみてください
  • 新しい空のソリューションを作成する
  • 新しい WPF プロジェクトをソリューションに追加する
  • クラス ライブラリ プロジェクトをソリューションに追加する
  • クラス ライブラリを WPF プロジェクトの依存関係として設定する
  • WPF でウィンドウを再作成する

これがうまくいくことを願っています。

この努力を頑張ってください!

于 2009-01-16T13:43:28.887 に答える