SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
WPF開発での陥りやすい罠
講師 .NETラボ 岡田 将
独断と偏見による回答
理由はこの後のスライドでわかるかもしれません
Windows8だから作るのはWPF
Windowsフォームの上位機能だから、WPFに移行すれば大丈夫だろう
C#やVB.NETなど同じ言語だからどっちも開発は同じ
新しいことができるので、WPFつかってみよう
Windowsフォームがいまいち遅いので、WPFに移行すれば早くなる
解像度が上がったので、画面に合わせて表示を大きくしたい
見た目や動きがすごいものを作りたい
灰色の画面が嫌だ
△
×
×
○
△
○
○
△
WPFには得手、不得手があります
2Dグラフィックを使う
3Dグラフィックを使う
アニメーション表示
データ表示
データ入力(入力制限)
大量な画面表示
細かい制御
得意
得意
得意
得意
不得意
得意
不得意
とにかくグラフィック系が充実しています。
WPFとWindowsフォームにはこんな差があります
UIのレイアウト方法
Windowsフォーム
•絶対配置(パネルをうまく利用して相対配置も
できる)
WPF
•相対配置(絶対配置も可)
コントロール
Windowsフォーム
•外観のカスタマイズ性が低い
•細分化されたコントロールによる高い生産性
WPF
•外観のカスタマイズ性が高い
•標準で用意されているコントロールが少ない
なぜこんなに違いがあるのか?
 仮説1) Adobe Flashの対抗製品として出されたから。
→今は亡きSilverlightの上位機能版、WPFを先に作り簡素化する形で
Silverlightが作られた。(Flashもいまだ全盛なのでもったいない)
 仮説2)とにかくGPUをつかって表示したかったから。
→確かに表示は早いけど搭載機能が早熟だった。
 仮説3)このスマホのタッチアプリ戦国時代を見越していたから。
→時代を先取りしすぎた。
WPFの罠
 XAMLの罠
→XML形式での記述方式でHTMLっぽい記述だが、HTMLとは違います。
 Styleの罠
→いろいろできて便利だが、出来すぎて複雑。もちろんCSSとも違います。
 データバインドの罠
→まずはMVVMを知らないととにかく使いづらい。
デザイナ作成もサンプルデータで対応しなければいけない。
WPF開発でやらかしそうなこと
 デザイナで画面を作ったが、XAMLの挙動がわからなくてとにかく時間
がかかった。
→XAMLをソースで読めるようになりましょう。
 HTMLで出来るから出来るでしょといわれたことが、簡単にはできな
かった。
→HTMLレベルの知識ではぜんぜん足りなかった。。。
というよりイベントが全然足りないし、うまく動かない。
 デザインが分業できるから効率が上がる。
→XAMLに対応できるデザイナがいなかった。
※ちなみに最近までExpressionStudioとVisualStudioとデザインの表現が異
なっていた。
WPF開発でやらかしそうなこと
 入力コンポーネントの機能が少なすぎて結局作り直した。
→設計とか調査でもっと早く気付きましょう。
(またはグレープシティやインフラジスティックスに泣きつきましょう。)
 無理やり対応しすぎてWPFのプロフェッショナルになった。
→先生、教えてください!
WPF開発でやらかしたこと
 同じプログラム、FrameWorkのバージョンでもWindowsXPとVista
で表示が異なっていた。
→お手上げ。せいぜい問題となるデザインの簡素化など。
 いろいろユーザーエクスペリエンスに懲りすぎて、表示エラーが出ま
くった。(SilverlightのサンプルをWPFに変換とか。。。)
→無視して修正し、何とか正常に戻る。
WPF開発でやらかしたこと
 いろいろユーザーエクスペリエンスに懲りすぎて、工数超過。
→怒られた。
WPF開発でやらかしたこと
 閉じるボタンの無効化などが簡単にできない。
→なんとかWindowsAPIを利用して対応。
//WindowsApiを宣言して閉じるボタンを無効化する
private const int GWL_STYLE = -16;
private const int WS_SYSMENU = 0x80000;
[DllImport("user32.dll", SetLastError = true)]
public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
private void Window_ContentRendered(object sender, EventArgs e)
{
//閉じるボタンを無効化
var hwnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);
}
WPF開発でやらかしたこと
 ボタンクリックがイベントから普通に呼び出せない。
→画面の挙動がメインとなる動作のため、表示側とバック側の共通処理がひたす
らエラーとなった。
なので、ディスパッチャーでなんとか対応。
//画面UIのイベントを処理するためのおまじない
Dispatcher.Invoke(new Action(() =>
{
//ここに画面更新処理を記述する
} ));
 画面更新(DoEvents)が使えない。
→これもディスパッチャー使った代用コードで対応。
//DoEventsの代わり
Dispatcher.BeginInvoke(new Action(() => { }), DispatcherPriority.Background);
WPF開発の華麗なる未来予想
 ストアアプリ開発もたぶん対応できる!
 今後主流になっていく技術なはず!
→いまはここまでXAMLの未来が来ていると増田さんも言っています!
Windows Store App を XAML で書く。
Windows Phone 8.1 アプリを XAML で書く。
Xcode で iPhone/iPad アプリを Storyboard で書く。
Android で axml で書く。
Xamarin.iOS/Android で、storyboard, axml で書く。
Xamarin.Forms で、Xamarin製XAMLで書く。
WPF で XAML で書く。
Siverlight を XAML で書く。
WindowsフォームもWPFで華麗なる変身
 棲み分けが出来ているので、まだまだWindowsフォームの需要はありま
す!
→Silverlightのようには、まだまだ終わりません。
 ElementHostを使えばWindowsフォームでWPF機能が使える。
→WPFの部品をForm内に持ってくる(ElementHostを利用)
using System.Windows.Forms.Integration; //ElementHost
参考サイト
http://jsdiy.web.fc2.com/software/wpftest/
まとめ
 適材適所で選択しましょう。
→ビジネス系はWindowsフォーム、グラフィックス系やタッチ系はWPFで。
 今後のためにXAMLは覚えるべき。
→覚えておくと、いざというときに役立つ気がします。
 Windowsフォームはなくならない。
→棲み分けが出来ているので、お互いにいいとこどりをしましょう。
参考資料
 WPF は死んだのか?
http://www.moonmile.net/blog/archives/6156
 Windowsフォームに対するWPFの真の優位性とは
http://d.hatena.ne.jp/Yamaki/20140819/1408417355
 C# WPFのImageをFormで使う ~パフォーマンス比較~
http://jsdiy.web.fc2.com/software/wpftest/
ご清聴ありがとうございました
このスライドの内容はフィクションであり、
実在の人物及び団体とは 一切関係ありません。
また、登場するソースコードは使えるかもしれませんが、
バージョン違いなどによる動作は一切保証しません。
以上の注意点を確認いただき、
用法用量を守って正しくお使いください。

Más contenido relacionado

La actualidad más candente

日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 

La actualidad más candente (20)

Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目Msを16倍出し抜くwpf開発2回目
Msを16倍出し抜くwpf開発2回目
 
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション 【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
【BS15】.NET アップグレード アシスタントで簡単にできます! .NET Framework アプリの .NET 6 へのマイグレーション
 
いまさら学ぶMVVMパターン
いまさら学ぶMVVMパターンいまさら学ぶMVVMパターン
いまさら学ぶMVVMパターン
 
XAML入門
XAML入門XAML入門
XAML入門
 
WPF MVVM Review
WPF MVVM ReviewWPF MVVM Review
WPF MVVM Review
 
WinFormsからWPFへ
WinFormsからWPFへWinFormsからWPFへ
WinFormsからWPFへ
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介 【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
Prism + ReactiveProperty入門
Prism + ReactiveProperty入門Prism + ReactiveProperty入門
Prism + ReactiveProperty入門
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
Iocコンテナについて
IocコンテナについてIocコンテナについて
Iocコンテナについて
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
20150530 めとべや東京 Reactive Property + Livetで作るWPFアプリ
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
 

Similar a WPF開発での陥りやすい罠

HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発
h_kishi
 
Windows 8 cp 速攻レビュー
Windows 8 cp 速攻レビューWindows 8 cp 速攻レビュー
Windows 8 cp 速攻レビュー
Makoto Nishimura
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability Seminar
Visso株式会社
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったこと
Kouji Hosoda
 

Similar a WPF開発での陥りやすい罠 (20)

Silverlightの今
Silverlightの今Silverlightの今
Silverlightの今
 
縁取りでアプリの文字を見やすくしよう
縁取りでアプリの文字を見やすくしよう縁取りでアプリの文字を見やすくしよう
縁取りでアプリの文字を見やすくしよう
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
 
デスクトップ アプリがこの先生きのこるには (2)
デスクトップ アプリがこの先生きのこるには (2)デスクトップ アプリがこの先生きのこるには (2)
デスクトップ アプリがこの先生きのこるには (2)
 
iPlotzで手書き風ワイヤーフレーム
iPlotzで手書き風ワイヤーフレームiPlotzで手書き風ワイヤーフレーム
iPlotzで手書き風ワイヤーフレーム
 
20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる20110212 Silverlight から Bing Maps に触れる
20110212 Silverlight から Bing Maps に触れる
 
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリにWeb制作で培ってきたFlashのリッチな表現力をモバイルアプリに
Web制作で培ってきたFlashのリッチな表現力をモバイルアプリに
 
無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発無料環境でWindows Mobileアプリ開発
無料環境でWindows Mobileアプリ開発
 
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
開発ツール「Wijmo」と「SpreadJS」からみる業務アプリケーションの変遷とこれから
 
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」第8回業開中心会議 「Windows 10 ユニバーサルアプリの概要」
第8回 業開中心会議 「Windows 10 ユニバーサルアプリの概要」
 
HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発HTML5@iPhoneゲーム開発
HTML5@iPhoneゲーム開発
 
20021007
2002100720021007
20021007
 
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
 
Windows 8 cp 速攻レビュー
Windows 8 cp 速攻レビューWindows 8 cp 速攻レビュー
Windows 8 cp 速攻レビュー
 
デスクトップアプリを『一歩前へ』進める方法
デスクトップアプリを『一歩前へ』進める方法デスクトップアプリを『一歩前へ』進める方法
デスクトップアプリを『一歩前へ』進める方法
 
今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略今から始める、Windows 10&新.NETへの移行戦略
今から始める、Windows 10&新.NETへの移行戦略
 
LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2LightSwitch で遊んでみた Rev. 2
LightSwitch で遊んでみた Rev. 2
 
20101127 Android Usability Seminar
20101127 Android Usability Seminar20101127 Android Usability Seminar
20101127 Android Usability Seminar
 
Unityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったことUnityのオンラインゲームをhtmlに移植してわかったこと
Unityのオンラインゲームをhtmlに移植してわかったこと
 
Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発Windows phone SDK 8.0でのアプリ開発
Windows phone SDK 8.0でのアプリ開発
 

Más de Sho Okada

Más de Sho Okada (16)

AppleシリコンのMacで Windows11を動かす
AppleシリコンのMacで Windows11を動かすAppleシリコンのMacで Windows11を動かす
AppleシリコンのMacで Windows11を動かす
 
ChatAIの未来予想図
ChatAIの未来予想図ChatAIの未来予想図
ChatAIの未来予想図
 
勉強会参加のすゝめ
勉強会参加のすゝめ勉強会参加のすゝめ
勉強会参加のすゝめ
 
ASP.NETの進化とASP.NET Core Blazorの凄さ
ASP.NETの進化とASP.NET Core Blazorの凄さASP.NETの進化とASP.NET Core Blazorの凄さ
ASP.NETの進化とASP.NET Core Blazorの凄さ
 
WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術WebブラウザでC#実行 WebAssemblyの技術
WebブラウザでC#実行 WebAssemblyの技術
 
いままで聴いてきたLTのおはなし
いままで聴いてきたLTのおはなしいままで聴いてきたLTのおはなし
いままで聴いてきたLTのおはなし
 
Excel取込みで失敗した先生
Excel取込みで失敗した先生Excel取込みで失敗した先生
Excel取込みで失敗した先生
 
今のWeb開発者に伝えたいWebブラウザの病みの歴史
今のWeb開発者に伝えたいWebブラウザの病みの歴史今のWeb開発者に伝えたいWebブラウザの病みの歴史
今のWeb開発者に伝えたいWebブラウザの病みの歴史
 
SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集SQL Server中級者のための実践で使えるかもしれないTips集
SQL Server中級者のための実践で使えるかもしれないTips集
 
オープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミングオープンソースでExcelレポートプログラミング
オープンソースでExcelレポートプログラミング
 
.Netのwebプログラマーに贈るサーバーインフラの比較的かんたんなお話
.Netのwebプログラマーに贈るサーバーインフラの比較的かんたんなお話.Netのwebプログラマーに贈るサーバーインフラの比較的かんたんなお話
.Netのwebプログラマーに贈るサーバーインフラの比較的かんたんなお話
 
メガネ型デバイスの未来について考える
メガネ型デバイスの未来について考えるメガネ型デバイスの未来について考える
メガネ型デバイスの未来について考える
 
止めないためのWEBインフラ入門
止めないためのWEBインフラ入門止めないためのWEBインフラ入門
止めないためのWEBインフラ入門
 
ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用ASP.NETを利用したAJAX開発の応用
ASP.NETを利用したAJAX開発の応用
 
WebMatrixに対応した、新しいけど新しくないRazor
WebMatrixに対応した、新しいけど新しくないRazorWebMatrixに対応した、新しいけど新しくないRazor
WebMatrixに対応した、新しいけど新しくないRazor
 
初心者でもわかるActive directoryの基本
初心者でもわかるActive directoryの基本初心者でもわかるActive directoryの基本
初心者でもわかるActive directoryの基本
 

Último

Último (12)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

WPF開発での陥りやすい罠