25

カスタム GDI+ 描画コントロールを使用する C# アプリケーションを、カスタム コントロールなどを使用する WPF アプリケーションに移行することを検討しています。

役に立つかもしれないと人々が推奨できるリソースはありますか? または実際に有益な個人的な経験はありますか?

4

3 に答える 3

37

(前もって長い投稿をお詫びします...伝えたいことがたくさんありました...お役に立てば幸いです。)

これが現在行っていることです (カスタム (GDI+) 描画コントロールを多用する Windows フォーム アプリケーションを WPF に移行しています)。実際、チームでの私の役割は、これらの GDI+ コントロールを構築することでした...そして今は WPF コントロールを構築することです。

アプリケーションをゼロから完全に 100% WPF にすることが道であるという Bijington に同意します。ただし、 WPF の相互運用機能を利用して、Windows フォーム アプリケーションをインプレースで変換しています。いくつかの制限はありますが、全体としては効果的なアプローチでした (期待したほどイライラすることはありませんでした)。

私がお勧めするのは、GDI+ コントロールの 1 つを使用して、WPF で同じコントロールを作成することです。そして、終わったら捨てて、もう一度やり直してください。あなたは常に最初の努力で何かを学びます...そしてそれを行うためのより良い方法があることを発見します. 私は何か小さなものから始めます...カスタムボタンは始めるのに適した場所です.

上記を行うことで、あなたがやりたいことすべてに何が必要になるかを味わうことができます.

1 つ注意しておきたいのは、WPF の学習曲線です。特に、Windows フォームのバックグラウンドを持っている場合や、カスタムの外観のコントロールを作成する場合は特にそうです。安倍さんがおっしゃる通り、全く別世界です。WPF は確かに多くの機能をもたらしますが、その機能には使い方を学ぶという代償が伴います。Abe は、WPF のカスタム コントロールがどのように「ルックレス」であり、その「ルック」を ControlTemplate で提供できるかについて言及しています。これは、ユーザー インターフェイスのカスタムの外観を提供する WPF の多くの方法の 1 つにすぎません。

これらの追加の方法のいくつかを列挙しましょう。

  1. WPF のスタイリング機能を使用して、既存のコントロールのスタイルを設定します。
  2. ContentControl から派生した WPF のコンテンツ モデルやコントロールを利用します。これにより、任意の外観の「コンテンツ」をコントロールのビジュアルに貼り付けることができます (たとえば、ボタンの中央にカスタム描画形状を貼り付けることができます)。
  3. UserControl を利用して、他のコントロール/要素からコントロールを作成します。
  4. WPF の既存のコントロール/クラスから派生させ、その動作を拡張し、異なる既定のビジュアル セットを提供します。
  5. FrameworkElement から派生させ、MeasureOverride、ArrangeOverride、および OnRender メソッドの一部またはすべてをオーバーライドして、カスタム WPF 要素を作成します。
  6. そしてもっと....あなたがそれを信じることができれば。

Windows Forms では、ハンマー (UserControl) とドライバー (Control) を与えられたようなものでした。ただし、WPF では ... 100 個のツールすべてを備えたツールボックス全体が提供されます。そしてこれが、学習曲線が通常よりも大きくなる理由の一部です。ただし、ハンマーやドライバーを使用して同じことを試みる代わりに、これまでになかったのこぎりを使用して、2x4 の端を切り落とすことができます。

資力

(良いニュースは、あなたを助けるリソースがたくさんあるということです。)

  1. 書籍
    • Chris Sells と Ian Griffiths による WPF のプログラミング (特に、第 18 章)
    • Matthew MacDonald による Pro WPF (特に、第 24 章)
    • Adam Nathan によって解き放たれた WPF (特に、第 16 章)
    • アプリケーション = コード + Charles Petzold によるマークアップ (特に、第 10 章、第 11 章、および第 12 章)
    • Essential WPF by Chris Anderson (特に第 3 章)

      私のお気に入りの本は、Charles Petzold の本と Adam Nathan の本です。ただし、Sells & Griffiths によるプログラミング WPF の第 18 章は、このテーマの概要であり、特に次の質問のカバーです: カスタム コントロールは本当に必要ですか?
  2. フォーラム
    • WPFフォーラム
    • StackOverflow
      以下は、特に注目すべき 2 つの投稿です ( onetwo )。
  3. MSDN MSDN のドキュメントが優れ
    ているという Bijington の意見に同意します。

  4. ブログ
    上記のフォーラム セクションで参照した 2 つの StackOverflow 投稿の 1つで、「必読」リストにある一連のブログを紹介しています。特に、Pavan PodilaKevin Mooreのブログを紹介します。Kevin Moore は、以前は WPF コントロールの WPF プログラム マネージャーであり、WPF Bag-o-Tricksと呼ばれる便利なコントロールのセットを持っていますが、さらに重要なことは、そこから学ぶことができるコントロールです。

  5. Samples, Samples, and more Samples 世の中
    にはたくさんのサンプルがあります。ほとんど多すぎます!Family.Show ( WPFのエンド ツー エンドの参照サンプルとして作成された) を指し、WPF SDK サンプル、特にそのセクション内のコントロール カスタマイズ サンプルを指します。

于 2008-11-08T18:14:24.523 に答える
3

WPFのコントロールを開発する方法にはパラダイムシフトがあります。すべての動作を定義してコントロールを探す代わりに、意図した動作のみを定義します。

これは、WPFへの移行の最も難しい側面です。コントロールクラスは動作のコントラクトを定義し、レンダリングに使用されるプロパティを公開し、ControlTemplateはコントロールの外観を定義するために使用されます。

これは、WPFの最も強力な機能の1つでもあります。将来のどの時点でも、コントロールのコンシューマーは、動作を変更せずに、外観を変更できます。これにより、コントロールのテーマ設定がはるかに簡単になります。

于 2008-11-07T17:38:18.853 に答える
2

これは実際に私が現在取り組んでいるプロジェクトですが、幸運にも再開することができました。これを行うことができる場合は、古いシステム/コントロールのコア機能を維持しながら、新たに始めることを強くお勧めします. 基本から始めて、以前にどこが間違っていた/正しかったかを知ることは常に良いことです.

個人的には、msdn Web サイトが 非常に便利であることがわかりました。stackoverflow は知識を得るには非常に適した場所ではありません。必要であればご指摘いただけると幸いです。

また、データバインディングについて質問がある場合は、ここを参照してください 。bea costa 彼女はそこでほとんどのことをカバーしています。

特筆すべきは、GDI 経由で wpf を使用することで、パフォーマンスが大幅に向上したことです。

于 2008-11-07T14:31:33.663 に答える