カスタム GDI+ 描画コントロールを使用する C# アプリケーションを、カスタム コントロールなどを使用する WPF アプリケーションに移行することを検討しています。
役に立つかもしれないと人々が推奨できるリソースはありますか? または実際に有益な個人的な経験はありますか?
(前もって長い投稿をお詫びします...伝えたいことがたくさんありました...お役に立てば幸いです。)
これが現在行っていることです (カスタム (GDI+) 描画コントロールを多用する Windows フォーム アプリケーションを WPF に移行しています)。実際、チームでの私の役割は、これらの GDI+ コントロールを構築することでした...そして今は WPF コントロールを構築することです。
アプリケーションをゼロから完全に 100% WPF にすることが道であるという Bijington に同意します。ただし、 WPF の相互運用機能を利用して、Windows フォーム アプリケーションをインプレースで変換しています。いくつかの制限はありますが、全体としては効果的なアプローチでした (期待したほどイライラすることはありませんでした)。
私がお勧めするのは、GDI+ コントロールの 1 つを使用して、WPF で同じコントロールを作成することです。そして、終わったら捨てて、もう一度やり直してください。あなたは常に最初の努力で何かを学びます...そしてそれを行うためのより良い方法があることを発見します. 私は何か小さなものから始めます...カスタムボタンは始めるのに適した場所です.
上記を行うことで、あなたがやりたいことすべてに何が必要になるかを味わうことができます.
1 つ注意しておきたいのは、WPF の学習曲線です。特に、Windows フォームのバックグラウンドを持っている場合や、カスタムの外観のコントロールを作成する場合は特にそうです。安倍さんがおっしゃる通り、全く別世界です。WPF は確かに多くの機能をもたらしますが、その機能には使い方を学ぶという代償が伴います。Abe は、WPF のカスタム コントロールがどのように「ルックレス」であり、その「ルック」を ControlTemplate で提供できるかについて言及しています。これは、ユーザー インターフェイスのカスタムの外観を提供する WPF の多くの方法の 1 つにすぎません。
これらの追加の方法のいくつかを列挙しましょう。
Windows Forms では、ハンマー (UserControl) とドライバー (Control) を与えられたようなものでした。ただし、WPF では ... 100 個のツールすべてを備えたツールボックス全体が提供されます。そしてこれが、学習曲線が通常よりも大きくなる理由の一部です。ただし、ハンマーやドライバーを使用して同じことを試みる代わりに、これまでになかったのこぎりを使用して、2x4 の端を切り落とすことができます。
(良いニュースは、あなたを助けるリソースがたくさんあるということです。)
MSDN MSDN のドキュメントが優れ
ているという Bijington の意見に同意します。
ブログ
上記のフォーラム セクションで参照した 2 つの StackOverflow 投稿の
1つで、「必読」リストにある一連のブログを紹介しています。特に、Pavan PodilaとKevin Mooreのブログを紹介します。Kevin Moore は、以前は WPF コントロールの WPF プログラム マネージャーであり、WPF Bag-o-Tricksと呼ばれる便利なコントロールのセットを持っていますが、さらに重要なことは、そこから学ぶことができるコントロールです。
Samples, Samples, and more Samples 世の中
にはたくさんのサンプルがあります。ほとんど多すぎます!Family.Show ( WPFのエンド ツー エンドの参照サンプルとして作成された) を指し、WPF SDK サンプル、特にそのセクション内のコントロール カスタマイズ サンプルを指します。
WPFのコントロールを開発する方法にはパラダイムシフトがあります。すべての動作を定義してコントロールを探す代わりに、意図した動作のみを定義します。
これは、WPFへの移行の最も難しい側面です。コントロールクラスは動作のコントラクトを定義し、レンダリングに使用されるプロパティを公開し、ControlTemplateはコントロールの外観を定義するために使用されます。
これは、WPFの最も強力な機能の1つでもあります。将来のどの時点でも、コントロールのコンシューマーは、動作を変更せずに、外観を変更できます。これにより、コントロールのテーマ設定がはるかに簡単になります。
これは実際に私が現在取り組んでいるプロジェクトですが、幸運にも再開することができました。これを行うことができる場合は、古いシステム/コントロールのコア機能を維持しながら、新たに始めることを強くお勧めします. 基本から始めて、以前にどこが間違っていた/正しかったかを知ることは常に良いことです.
個人的には、msdn Web サイトが 非常に便利であることがわかりました。stackoverflow は知識を得るには非常に適した場所ではありません。必要であればご指摘いただけると幸いです。
また、データバインディングについて質問がある場合は、ここを参照してください 。bea costa 彼女はそこでほとんどのことをカバーしています。
特筆すべきは、GDI 経由で wpf を使用することで、パフォーマンスが大幅に向上したことです。