X



WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part22
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2017/12/13(水) 23:35:47.18ID:muTUiD7C
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part21
http://mevius.2ch.net/test/read.cgi/tech/1494288553/

関連スレ
Windows 10 UWPアプリ開発 Part 2
http://mevius.2ch.net/test/read.cgi/tech/1499658092/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
000652017/12/16(土) 03:04:22.39ID:SSRXngMG
補足しとくと、VMはビューに含まれると考えてくれ。
ビューにタイマを持つと決めたなら、VかVMのどちらに置くかははっきり言ってどうでもいい。
MVVMはあくまでビュー層に閉じたデザインパターンであって、
モデルとの役割分担さえ守れてればあとは大した問題ではない。なんならVMなんか無くても大枠には影響しない。
0007デフォルトの名無しさん2017/12/16(土) 13:30:30.25ID:qbOTG2fJ
>>5
定期的にサイトをダウンロードして解析してメール送信等を行うプログラムの場合はどうしますか?
0008デフォルトの名無しさん2017/12/16(土) 13:50:00.58ID:VgVQwchc
>>7
モデルというか内部処理側だな
少なくともビューに直接埋め込むのは無い
あと、そういう単画面のツール的なアプリにVMは要らん
MVVMはDBの単純な読み書きをしたりするだけの紋切り型の画面を大量生産するのに使うんだよ
0009デフォルトの名無しさん2017/12/16(土) 17:41:34.16ID:vL3jccpr
>>7
Mでいいんじゃないかな。
タイマーは単体テストするならインターフェース挟んで実装差し替えれるようにしておくと幸せかも。
0010デフォルトの名無しさん2017/12/17(日) 16:48:26.13ID:s1EK5iqs
WPFでMVVMパターン勉強中(Prism6 + ReactiveProperty)
ボタンとWebBrowserを配置して,ボタンを押したときにWebBrowserのRefreshメソッドを
実行したいのだが,どのように実装すればよいか教えてほしい。
メソッド自体はBehaviorで実行できるが,メソッドへのトリガのかけ方がわからない。
Messenger? ActionTorigger?あたりを使う?

あと,できればWPFの勉強方法も教えてもらえるとありがたい。
0011デフォルトの名無しさん2017/12/17(日) 19:21:48.62ID:LppkGEpm
なんも処理はさまないならEventTriggerでClickイベント拾ってCallMethodActionでWebBrowserのReflesh呼んでもいいんじゃないかな
0012デフォルトの名無しさん2017/12/17(日) 19:36:49.11ID:o3Brs4V4
普通にイベントハンドラでやればいいでしょ
間にVMを噛ませる意味が全くない
0013デフォルトの名無しさん2017/12/17(日) 20:15:44.50ID:6F/MtA/p
MVVMを勉強したいだけならWPFより他の方法を取ったほうがいい
BehaviorにしろEventTriggerにしろMVVMやるだけなら要らん
Commandも要らん
焦点がぼやけるだけ
0014デフォルトの名無しさん2017/12/18(月) 07:11:35.08ID:ZBmMrMTz
MVVMを勉強したいならテーマ選定も不適切だね
モデルが明確に定義できないものにMVVMは向いてない
自分のToDo管理システムでも作っとけ
0015デフォルトの名無しさん2017/12/18(月) 08:47:49.36ID:pdWJMZAc
複数選択できるチェックボックスつきのリストビュー
というのがWPF初心者には不向きな題材に思えるけども
年賀状住所録とか交通費清算フォームとかがいいんじゃない、Master-Detailな画面で
0016デフォルトの名無しさん2017/12/18(月) 08:54:40.49ID:I3I0Txu7
今後複雑化したら(既に複雑だから)UIとロジックを分離したいんだろ
0017デフォルトの名無しさん2017/12/18(月) 12:33:21.65ID:ksjf7Uk6
>>16
迷ったときは原則に立ち返ることが大事。
なんでビューとロジックを分けるかというと、オブジェクト指向でいう「関心の分離」に従って
それぞれビューはビューだけ、ロジックはロジックだけに集中して開発できるようにするのが目的だ。
でMVVMはさらにこのビューを「ビューの状態とその制御」と「デザイン」とに分離するわけ。
で質問者のケースでは、大まかに関心を分離すると、ブラウザの制御、スケジューリング、ビュー、となるだろうな。
こう分離したときビューっておそらくかなり単純なものになるはずだよ。
その上であえてVMを分離する必要があるだろうか?ということ。
0018172017/12/18(月) 12:44:16.07ID:ksjf7Uk6
先に言っておくけど、バインド使いたいだけならコードビハインドにプロパティ定義すれば済む話だからね。VMを使う理由にはならない。
0019デフォルトの名無しさん2017/12/18(月) 14:12:27.02ID:pdWJMZAc
WebBrowserに依存関係プロパティは存在せず、かと言ってsealed宣言されてるクラス
セキュリティ上の制約という説明になってるが早い話がいじれない
他の選択肢があるんじゃないか、例えばCefSharpなら今風でナウい子向けじゃないの
0020デフォルトの名無しさん2017/12/18(月) 21:37:06.56ID:KKU0+hS1
前スレのポトペタできるを信じて勉強がてらユーティリティ作ろうと思ったんだけど、
フォルダダイアログって WindowsAPICodePack を入れるしかないのか?
0021デフォルトの名無しさん2017/12/18(月) 21:42:14.59ID:Sr5Op73M
チープな奴でよければWindows.Formsを参照に追加しても使える
何となく負けたような感じがするが気にしてはいけない
全てはMSが悪い
0022デフォルトの名無しさん2017/12/18(月) 21:49:14.00ID:KKU0+hS1
WPFはポトペタできるって主張したの誰だよw
WinForms 使ってやってみる、ありがとう
0023デフォルトの名無しさん2017/12/18(月) 21:50:10.70ID:KKU0+hS1
あ、WinForms のフォルダブラウザダイアログを使って WPF を使ってみるってことね
0025デフォルトの名無しさん2017/12/18(月) 23:52:51.70ID:trZjI+jL
BitmapImage を MemoryStream から読み込んで作ってるんですが、
特定の jpeg ファイルを非同期で読ませると、デコードが非常に遅くなります(他のファイルの 10 倍くらい)
同期的に読ませると普通に速いです
メモリには余裕があり、また Visual Studio のプロファイラを見る限り、GCが頻発してるわけでもありません
また jpeg を bmp に変換してやると問題は解消されて、他のファイルと同じくらいの速度でデコードが完了します
(1) なぜ特定のファイルだけ遅くなるのか
(2) なぜ非同期だと遅くなるのか
このあたり、何か知ってる方はいるでしょうか?
0026デフォルトの名無しさん2017/12/19(火) 01:34:49.55ID:eSWq4V/0
新規アプリ作ってその1つのファイルだけ読んでも遅いんだよね??
まぁ、そうだしても思い当たるふしねぇな。
0027デフォルトの名無しさん2017/12/19(火) 10:59:02.77ID:sSX39KHU
どこから持ってきたJPGなんだい?
ステガノグラフィや埋め込みバイナリとか付いてるんじゃない?
JPGファイルの内部をチェックしてみてはどうかな?
0030252017/12/20(水) 00:20:54.32ID:zjJQXjwR
いろいろアドバイスありがとうございます
眠すぎるのでわかったことだけ

問題のjpegファイルですが、セグメントを一個ずつ消してみて
デコード速度を測定したところ、APP2セグメントが問題だと分かりました
APP2セグメントを消すと他のファイルと同じくらいの展開速度になります。
BitmapImage がカラープロファイルを見ていい感じに表示しようと頑張ってるんだと思います

それにしても非同期のときだけ10倍も遅くなる理由が分かりませんが……
0031デフォルトの名無しさん2017/12/20(水) 03:17:30.49ID:hM0QjtZR
BitmapCreateOptionsにIgnoreColorProfileあるから、それ指定すると速くなるのかな?
0032252017/12/20(水) 21:55:16.61ID:zjJQXjwR
>>31
どんぴしゃです
100倍くらい速くなりました
コードはこんな感じです
ttps://ideone.com/6iePK6
0033デフォルトの名無しさん2017/12/22(金) 17:58:29.73ID:cwtnIwbr
Pixel Shader Effects Libraryのプロジェクトが古すぎるから2017でもビルドできるように作り直した
8年前というとWindows 7が出たころだよな
現在でも機能が先進的すぎて使いこなせる気がしない
0035デフォルトの名無しさん2017/12/23(土) 14:19:27.79ID:WyEjMBsJ
最近、海外でwpf、wpf言うから流行ってんのかと思ったらwtfだったわ
0036デフォルトの名無しさん2017/12/23(土) 15:39:39.20ID:TCPm9KYy
wpfで助かったw
製品型番で微妙に設計が違う画面設計が数十種類もあって、WinFormsではコマタだったが、wpfで事なきを得た。
WinFormでは、ロジックからGUIコンポーネントにアクセスするのに対し、wpfはコンポーネントからコントローラーにバインドする。
画面バリエーションに対し、ロジックを共通に使えるのは助かる。
0037デフォルトの名無しさん2017/12/23(土) 19:48:54.37ID:mZJ5Q3UF
winforms触ったことねぇけど、フォーム?の継承はできなかったんけか?
0038デフォルトの名無しさん2017/12/23(土) 21:02:45.17ID:I36xmAgh
>>37
普通にできるよ
0039デフォルトの名無しさん2017/12/23(土) 21:22:31.22ID:mZJ5Q3UF
そっか。なら
>製品型番で微妙に設計が違う画面設計が数十種類
もWinFormsでも問題なさそうだけどな。
0040デフォルトの名無しさん2017/12/24(日) 05:36:08.76ID:+pnXn1UY
微妙に違うカスタムコントロールを継承先から差し替えするのか?
ChildrenからName探して、カスタムコントロール差し替え&イベント設定するのも手は手だな。
0042デフォルトの名無しさん2017/12/24(日) 11:06:36.77ID:h6xl/PRx
項目増やしたり減らしたりするのが、xamlだと簡単だってのも在るね
0044デフォルトの名無しさん2017/12/24(日) 11:38:03.13ID:Zvi772ic
>>41 が WPF、WinForms どっち側を勧めているのか分からない

WPF推奨: WPFに慣れると(Formsを扱う場合)発想からして(コントロールの扱いやUI差し替えなどWPFに比べて)すべてが面倒になる(面倒くさく感じる)んだな
Foms推奨: WPFに慣れると(設計についてごちゃごちゃ考えるようになり)発想からしてすべてが面倒(面倒な扱いの人)になるんだな
0045デフォルトの名無しさん2017/12/24(日) 13:07:05.56ID:/uYLPwgV
ちょっとしたアニメーションをつけるだけでWindowsフォームだと大騒ぎになる
WPFならトリガー入れてStoryboardでアニメーションがあっさり入る
もちろんWinformsでも頑張ればできるわけだが手数かかってしまい手早くインスタントな作りにならない
0046デフォルトの名無しさん2017/12/25(月) 04:14:58.07ID:CQjgWB2v
アニメーションするUIは散々ウザいってよく言われてるのにカッコイイとか思ってる奴もいるのね。
flashのUIがウザい理由もそれ。
0047デフォルトの名無しさん2017/12/25(月) 08:08:45.44ID:md+ROFYd
やっとXAML分かってきたわ
最初の一歩の敷居高すぎやろ
魔除けかよ
0048デフォルトの名無しさん2017/12/25(月) 08:32:54.67ID:ny2AXHbu
>>46
WindowsのOS自体がアニメーションだらけの時代に、化石みたいなこと言う人いるんだな
0049デフォルトの名無しさん2017/12/25(月) 08:39:31.72ID:sz9H2GSP
>>46
アプリの動作とは全く無関係なアニメーションがウザいだけ。
0050デフォルトの名無しさん2017/12/25(月) 08:53:23.02ID:jpeL0ZvK
VS2008のアニメーションは最低最悪のUXだったよな
オフにできるとはいえ、WPFになる直前の史上最高完成度のVSがあれで台無し
0051デフォルトの名無しさん2017/12/25(月) 13:39:46.66ID:CQjgWB2v
WidowsのアニメーションをONにしてる開発者ってかなりの初心者。
アニメーションしてるおかっこいい、最先端、革新とか言ってるのか。

マジ笑える。>>48
0052デフォルトの名無しさん2017/12/25(月) 19:27:35.90ID:jTjXnRKU
アニメーションはカッコいいだろ
電卓がまともに計算できなくなるとしても優先すべきだ
0057デフォルトの名無しさん2017/12/26(火) 04:40:04.64ID:5vo32ZRK
>>48 ←こいつ、Windowsの効果音もONにしてそうwww
0059デフォルトの名無しさん2017/12/26(火) 11:58:15.79ID:zc8zApfr
ウインドウズはもちろん若い子が夢中のアイホンにアンドロイドもアニメーションだらけ
あれがカッコイイんでしょ
0060デフォルトの名無しさん2017/12/26(火) 12:19:29.69ID:Tr1ZK6Zb
アニメーションをオンにして遅くなるようなボロいマシン使うなよ。
0061デフォルトの名無しさん2017/12/26(火) 12:48:51.28ID:5vo32ZRK
どんなに速いマシンでもアニメーションをオンにしたら遅くなることも理解できないアホがいるとは。
ここム板なんだけど。まさかコード書けない奴までいるとは想定外。
0062デフォルトの名無しさん2017/12/26(火) 13:09:47.51ID:Tr1ZK6Zb
お前はプログレスバーアニメーションのようなものまで否定するのか?
0063デフォルトの名無しさん2017/12/26(火) 13:58:54.42ID:RQSEfVms
進捗しているように見せかけるプログレスバー(ブラウザに多い)は死ね
0064デフォルトの名無しさん2017/12/26(火) 19:03:30.01ID:G0QFCKVg
wpf使えない人は、こういう言い訳するんだな
出来ないのに出来る人を蔑むプライドっって笑えるね
0065デフォルトの名無しさん2017/12/26(火) 19:31:06.30ID:tRG2bysK
>>63
失礼なことを言うな

進捗率の「%」部分が
「%」と「I」が交互に表示されて
動いてるように見えるだろう

でも、死んでるんだけどね
0069デフォルトの名無しさん2017/12/27(水) 21:29:11.71ID:v2M6axp6
>>68 ←こいつすげー馬鹿。アニメーションの実装したことないことがバレバレ。
0070デフォルトの名無しさん2017/12/28(木) 00:28:06.05ID:kxDv5QXx
アニメーションがかっこいいとか遅いとかそういう事言い合ってるのに、突然実装の話しだす。無理するなよw
0071デフォルトの名無しさん2017/12/28(木) 02:19:47.12ID:MWf/2gSQ
横レスだがWindowsのアメニーションを体感で遅くなるとか言ってる人はWindows使ったことないと思う。
Windowsのアニメーション装飾が何の機能か知らない人の発言。おらそく馬鹿マカー。
0072デフォルトの名無しさん2017/12/28(木) 02:31:23.10ID:MWf/2gSQ
当たり前だがPCの速度でアニメーションが早くなったり遅くなったりするような実装になってない。
だから速いPCにしろというのはさすが意味不明、筋が通らない。体感なんてなおさら関係がない。
MS開発者はアニメーションはふつうOffにすることすら知らないんだからやはりマカーだね。
Appleは古い機種をアップデートすると故意に遅くなるようにしてたらしくて訴えられたが。
0073デフォルトの名無しさん2017/12/28(木) 02:34:35.66ID:MWf/2gSQ
> 視線誘導とかの目的

これが嫌われてる細大の理由だね。flash=詐欺広告、下品なエロ広告
0076デフォルトの名無しさん2017/12/28(木) 08:41:24.67ID:Efj2BqIl
すまんのう、ガンダム世代の爺なのぢや
0078デフォルトの名無しさん2017/12/29(金) 11:06:39.39ID:IFaklCI8
Windowsのアニメーションをオンにしてる開発者を一度もみたことない。
顧客からもアニメーションのオフにする方法は聞かれるが仕様でアニメーションにしてくれなんて要望されたこともない。さすがに無職でしょう。
0079デフォルトの名無しさん2017/12/29(金) 11:32:12.71ID:LK61JUUB
パフォーマンスオプションの視覚効果のことなら今どきのPCならデフォルトでONだろうが、
開発者でもわざわざOFFにしてる奴なんて見たことない。
0082デフォルトの名無しさん2017/12/29(金) 12:22:26.30ID:lbM9I2z0
作れないやつが、ほぼ言いがかりで作れるやつにマウンティングするとか笑えるねw
webがアニメしまくりなのに、もしかするとjavascript切るんだろうか?
0083デフォルトの名無しさん2017/12/29(金) 13:39:19.10ID:aamMaNHt
よく知らないけど、iPhoneの電卓がバカなアニメーションのせいでまともに使えなかったことは知ってます
0084デフォルトの名無しさん2017/12/29(金) 14:48:11.01ID:WAsOoLBK
操作性を損なわない程度のものならあっていいんじゃないかい。

画面に変化のあったところを気づかせるためや、マウスオーバー時になにかできることしめしたりや、ナビゲーション時に前のページと関連のある項目をわかりやすくするためとか。

すごくアプリに慣れた人にとってはいらないかもだけど、そうでない人にとって気づきやすくさせるために使えると思う。

エロ広告みたいなうざいやつだけではないから、適切に使えばいいだけの話。そして、WPFには組み込みのアニメーション機能があって、そういうのが無いプラットフォームよりも楽に作れるってだけじゃん。

なんで言い争ってるの?
0085デフォルトの名無しさん2017/12/29(金) 16:23:15.23ID:EUKc8TpD
組み込みのアニメーションが憎くてしょうがない
WPFにメリットがあってはならない
0087デフォルトの名無しさん2017/12/29(金) 18:52:00.48ID:ZR/YTuxZ
そんなに楽なのか
俺はトランジションが難しすぎてドハマりしてるけどな
アーティファクトを発掘したはいいが使い方がわからない感じ
0088デフォルトの名無しさん2017/12/31(日) 13:53:48.10ID:RxjWIgpR
操作の遅延動座でしかないアニメーション装飾で喜ぶなんて小学生低学年までとマカーだけだろ。
0091デフォルトの名無しさん2018/01/02(火) 16:20:31.95ID:7ebLCd4s
正月ということもあって勢いでスライドショーするソフト作ってみたが
アニメーションが重いというのはないね、軽快で快適
どちらかというとダウンロードの仕組みが入ると遅い
上手いこと先読みしたりキャッシュしとかないと無理あるね
0092デフォルトの名無しさん2018/01/02(火) 17:08:51.36ID:8YoziARP
本気で言ってるなら頭の病気。
0094デフォルトの名無しさん2018/01/03(水) 14:34:25.24ID:YeHuAKNh
WPFむずいわー
今日はTreeViewをやった
けどTreeViewってWinFormsでもむずいんだよな
むしろFormsのほうがむずいまである
はあ〜しんど
0095デフォルトの名無しさん2018/01/03(水) 20:51:32.29ID:wQKC+m+q
>>94
正直なところTreeViewをMVVMであれこれやるところが一番めんどくさい
やらなくていい
0096デフォルトの名無しさん2018/01/04(木) 17:38:25.71ID:/K0pbaw4
ComboBoxも結構面倒だと思うよ、TreeViewより頻出だと思うし
文字に色つけたりアイコン画像入れたり
0097デフォルトの名無しさん2018/01/05(金) 15:18:52.33ID:e8K0PkEg
このスレまだあったのか。しかも伸びてる。相変わらず普及しない、ゴミという話題ばかり。
0099デフォルトの名無しさん2018/01/05(金) 17:32:44.80ID:Mh2xn0k1
あるならこれよりマシなGUIフレームワークを教えて欲しいわけだが
0100デフォルトの名無しさん2018/01/05(金) 17:55:31.44ID:LElVOghW
WPFはシステムであってフレームワークは自分で構築するか、既存のフレームワークを導入する必要がある
以前からWPFがむずかしいと言われる理由の一つがこの導入コスト学習コストの高さ
0102デフォルトの名無しさん2018/01/05(金) 23:13:14.07ID:rd3AiD2r
VisualStudio本体もWPFで作られてるというよりWPFを描画と入力に使った独自フレームワークだからね
次のVSは本体にもElectronが入ってくるだろうけど
0104デフォルトの名無しさん2018/01/06(土) 11:56:43.29ID:A/n+HHYo
VisualStudioのIDEってサードパーティー製のコントロールを使ってるって以前聞いたけど
本当なのか?
0106デフォルトの名無しさん2018/01/07(日) 00:22:24.64ID:Njbpmjhm
MVVMの本質ってModel View ViewModelに分けることであって、
データバインド機能がなくてViewとViewModelを手動で結びつけててもMVVMです?

手動でやるとMVVM以外に結びつけるクラス(コード)が必要ですけど。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況