X

WPF(.NET, WinUI) GUIプログラミング Part28

■ このスレッドは過去ログ倉庫に格納されています
2022/01/20(木) 05:40:40.10ID:+TySdXxT
WPF(Windows Presentation Framework)について語るスレ。

前スレ
WPF(.NET, WinUI) GUIプログラミング Part27
https://mevius.5ch.net/test/read.cgi/tech/1632044619/

関連スレ
Windows 10 UWPアプリ開発Part 3
https://mevius.5ch.net/test/read.cgi/tech/1627556967/

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
2022/02/13(日) 09:01:56.66ID:39UxLAwC
都度フォントの変更大変そうだなと思ったらResourceDictionaryにFontFamilyを指定しとくのか
2022/02/14(月) 08:48:32.05ID:JUrXsXai
>>295
英語だとカッコイイってのがそもそも思い込み。
隣の芝が青く見える的な。
ガイジンさんから見たら漢字カッコイイって思ってるかもしれん。
2022/02/14(月) 20:30:33.82ID:OKHyco7f
>>81

キチガイの世界へようこそ・・・
と言うか20世紀なのか今は?
2022/02/14(月) 21:53:59.37ID:7DLpkbM0
>>298
参考までに

Windows 95 最小ハードウェア仕様要求
物理メモリー、8 MB以上
ストレージ、75 MB以上
2022/02/14(月) 22:10:00.51ID:VjWJSQ6q
いくらPCが速くなってもWPF使ったソフトはクソ重い。
MSすら使いたがらないわけだ。
2022/02/14(月) 23:21:43.51ID:0GI11KhK
>>299
たしか1998年にあまり予算をかけたくない俺は
Celeron300AでRAM256MB積んだPCを自作していた

そのころの話か?
やはり20世紀の話だろこれは?
2022/02/15(火) 06:12:51.13ID:hA9gyrCi
>>301
お前がどんなPC組んでたとか全く意味ない。その時代に普及しているPCスペックが全て。
2022年だからそれに合わせてこんな甘々な基準になっているのに
それすらクリアできないようならソフトウェア技術者向いていないから転職を勧める。
2022/02/15(火) 08:57:14.52ID:VnsR49ox
10年前からWPFは既にあって、当時の話題とは
Windows Formsから移行とかSilverlightと比較とか
比較対象が変更されはしたが、今と大して変わらない話題だよね
2022/02/15(火) 15:34:06.63ID:GyhCU1xc
WPFは出た直後にクソ認定されて15年経ってもその評価は変わらない。
FISやIOCと違って技術者は賄賂は受け取らないし忖度もしないのだ。
2022/02/15(火) 15:57:40.84ID:tpfUF+h+
WinForms
・旧来のウィンドウズAPIの上にレイヤーを重ねたようなもので、(シンプルであるという)利点と
 (平凡なレイアウトやスタイリングオプションという)致命的な災いの両方がある。

WPF
・WinFormsからわずか4年後にリリースされたが、デザインパターンとコンセプトがより複雑であったため、
 一般に受け入れられるまでにはしばらく時間がかかった。
・大規模なデータセットに対してWinFormsよりも大幅に高速化できるが、正しく使用するにはより深い知識が必要である。
・現状は WPF on .NET 6 が一番つぶしが効く状態。

UWP
・Windows UIの未来だったが、鳴かず飛ばず、現在はメンテナンスモードになっている。
 良い点:魅力的なUIを簡単に作ることができ、マウスとタッチの両方でうまく動作する。
 悪い点:サンドボックスとパッケージングの要件が非常に厳しい。
 結論:避けるべき。

WinUI 3
・小さなチームがUWPのUIスタックからできる限りのものを救い出そうとしている。
・遅い、バグが多い、そして多くの歴史的なお荷物が重くのしかかる。
・開発体験はWPFの方が上であり、開発チームは改善に消極的である。
・1年後にまた確認したいが、私は悲観的だ。
2022/02/15(火) 19:01:34.90ID:VjJREOVz
現状、WindowsデスクトップアプリはWPFでWinFormsのようなイベント駆動が一番マシなんですかね
レイアウトの自由度、高DPIへの対応、表示速度を争点にした場合
2022/02/15(火) 19:16:29.32ID:3zKYAjvH
winrtはどこに属すの?
2022/02/15(火) 19:33:35.93ID:ES8IiGQC
>>306
それでいいと思う。それが一番処理速度的にもファイル構成的にも無駄がない。
ただViewに依存しない処理はなるべく別クラスに切り出すことぐらいはしておいたほうがいい。
2022/02/15(火) 19:36:57.71ID:sOBRzctF
データバインドは使わんの?
エラー表示とか便利っぽいよね
2022/02/15(火) 20:18:43.19ID:A9ZkwK3T
>>309
使った方がいいと思った箇所で使えばいいんじゃね?
どちらかに縛る必要はないと思うが
2022/02/15(火) 20:29:33.78ID:qXoJQquN
>>305
WinUI3だが、内部のWinRTは十分こなれているからバグは少ない
問題は表示系だが操作不能になるようなものは稀で回避策はある
速度に至ってはWPFより遅いことはないんだが、何処の情報なん?
2022/02/15(火) 20:36:28.97ID:xE3FS5+c
速度に関して前スレで話題になってたやろ
2022/02/15(火) 20:40:31.81ID:qXoJQquN
>>312
1.0 Stable以前は酷いものだったが、そこから情報アップデートしていない人が多いのかね?
314デフォルトの名無しさん
垢版 |
2022/02/15(火) 20:42:15.57ID:xE3FS5+c
https://github.com/microsoft/microsoft-ui-xaml/issues/1633
これは解決されたの?
2022/02/15(火) 20:55:45.02ID:s9A1ir2/
>>305

> ・現状は WPF on .NET 6 が一番つぶしが効く状態。
これはないかな
まず.NET6後二年も寿命がない

それは別としてつぶしが利くのはwinforms
技術的進展もなければ使えなくなる技術もない
安定
2022/02/15(火) 20:58:11.37ID:z+l2+roq
>>313

>パフォーマンスに関する考察
>Windows App SDKのバージョン1.0では、WinUI 3アプリの起動速度、RAM使用量、インストールサイズが、UWPで見られるものより大きい/遅いです

by docs.microsoft.com


Windows App SDKのバージョン1.0では
Windows App SDKのバージョン1.0では
Windows App SDKのバージョン1.0では
2022/02/15(火) 20:59:22.62ID:qXoJQquN
>>314
WinRT系だと自家製ビヘイビアもほとんど使わずに済むから特に気にならないバグだな
既存のコントロールは関係ないだろうし
2022/02/15(火) 21:07:44.33ID:xE3FS5+c
コンポーネントメーカーdebexpressの中の人が速度がでねぇっていってるし
community toolkitのDataGridも速度出てねぇし
つまりListViewとかで速度がWPFより遅いって話なんじゃねぇの??
2022/02/15(火) 21:08:04.86ID:qXoJQquN
>>316
UWPの.net Nativeは極めて優秀だからそれと比較してGUIのパフォーマンスやインストールサイズが悪くなるのはしょうがない
UWPだとライブラリの中でアプリで使われていない部分を全部バッサリ切り捨てるしAOTにコンパイルされるので
WPFのUnSafeと同等のパフォーマンスだ
UWPはWPFと比べられないほどインストールサイズも小さいし速度も早い

ただUWPでもファイル操作はサンドボックス化の影響を受けていて遅いが、WinUI3はSystem.IOを使えるからそこは充分早い
2022/02/15(火) 21:10:30.82ID:6QhYGEAR
マイクロソフトの中でもフレームワーク開発チームは互いに戦ってるのかな
2022/02/15(火) 21:12:07.58ID:ES8IiGQC
>>315
WPF on .NET6の次はWPF on .NET8に乗せ換えるだけだぞ。

>技術的進展もなければ
だからそもそも採用されない。
わざわざ生産性が低いものを選ぶ理由がない。
2022/02/15(火) 21:24:14.14ID:s9A1ir2/
>>321
生産性は高いよ
時間当たりに生み出す価値が大きいほうが生産性が高いと言う

winformsで5分でできるものをWPFでは確実にそれ以上かかる
しかも学習時間も含めるとWPFの生産性が確実に低い
2022/02/15(火) 21:31:14.07ID:VAjtBqbg
WinFormとWPFは同等の手法が使えるからどっちがどっちって事はないだろ
慣れたら何かBindableObjectとReativeProperty使えばVVMでサクっと作れて見通しも良い
2022/02/15(火) 21:33:48.96ID:cnyVxlxn
>>319
そもそもUWPってGUIはWindows側のAPIを呼ぶだけだからな
WPFやWinUI3みたいに巨大なランタイムをロードする必要がない
AOTみたいな小手先の最適化を云々する以前に、ディスクIOの量が全然違う
2022/02/15(火) 21:49:28.29ID:cAuAN9G6
>>322
いや、生産性はかなり低い。
作るスピードも修正するスピードもWPFの方がずっと上。
winformsの進化版として使う分には学習時間なんてほとんどかからない。
2022/02/15(火) 21:52:12.13ID:s9A1ir2/
常に勉強し続けるのが善で正義と思うのは間違い
MVVMのパターンも変わり続けて何か正義なのかすらもわからない

これはこうしたほうがいいと絶対的に言える状況なのか
1年しないうちにいやいやこれはとか訂正されたりライブラリから削除されたり生産性が低すぎる
2022/02/15(火) 21:55:34.96ID:s9A1ir2/
MVVMの長らくの議論
ダイアログはどうやって出すかみたいな馬鹿な問題とかもうどうでもいい
2022/02/15(火) 22:09:55.99ID:ES8IiGQC
ひょっとしてWPFはMVVMで作らないといけないと勘違いしている?
MVVMを一切使わなくても問題ないよ。それでもWPF使った方が開発が楽だから。
2022/02/15(火) 22:17:46.86ID:C8AABCuO
バインディングって単語が出るとMVVMパターンと同一視しちゃうのかな
2022/02/15(火) 22:43:33.35ID:sOBRzctF
コードビハインド書いたらMVVMじゃないと
2022/02/15(火) 22:46:16.80ID:aWeidgzt
個人的にはC++みたく良いとこ取りする感じかな
WinFormsの気軽さで、データバインディングするだけ
2022/02/15(火) 22:49:22.58ID:VAjtBqbg
単発アプリならVVMでじゅうぶんMは要らん
やりにくいところはコードビハインドで逃げ
2022/02/15(火) 23:47:52.75ID:DOsFVpUk
>>332
Mは普通APIの先のサーバサイドにあるだよ
2022/02/15(火) 23:48:13.11ID:DOsFVpUk
>>327
2022/02/16(水) 10:21:32.43ID:JfSJk6Eb
笑笑
2022/02/16(水) 10:59:48.00ID:T0LbVKne
ダイアログに関する議論はMFCの頃から繰りかえされていてMVVM関係ない
最近の話題だと適用ボタンだよね。ダイアログに何か設定するOn/Offという項目があったと仮定して
その設定が反映されるのは(1)On/Off切り替えた瞬間(2)適用ボタンを押したとき(3)OKを押してダイアログを閉じた時
でそれぞれ異なる
2022/02/16(水) 11:30:15.17ID:JfSJk6Eb
使うコントロールも考慮する必要がある。
トグルスイッチはOn/Offを切り替えた瞬間に設定を反映することが求められる。
2022/02/16(水) 14:09:37.66ID:ie/DSr5F
その話題もMVVM関係ないんだけどな
ただのUIの問題で
2022/02/16(水) 14:28:20.83ID:prElW7Wj
https://github.com/microsoft/microsoft-ui-xaml/issues/6360

これうちでも発生してるわ
パッケージ名を、初期値のぐちゃぐちゃなやつに戻したらきちんと動いた
パッケージ表示名だけ変えておけば問題ない?ユーザーから見える部分で影響がなければいいんだけど
2022/02/16(水) 14:46:38.19ID:9x9DexoX
>>338
うん、だから今は設定反映の話題だよ。
2022/02/16(水) 21:11:28.96ID:raZgx3Yl
違うんじゃね?
VとVMの対話の件だろ
結局メッセンジャーパターンで解決されたけど

MVVM界隈でもWPFだけだぞ
とにかくアホらしい
2022/02/16(水) 21:54:37.14ID:GuByYKJZ
MVVMで真っ当に実装する必要があるならダイアログ今はサービス使ってるわ
適当アプリならVMからShowDialogや!
2022/02/16(水) 22:33:25.97ID:raZgx3Yl
MVVMで御高説をのたまってるやつらも、
ダイアログだけVMがVの参照持ってるの多いと思われ

アホ過ぎ
2022/02/16(水) 22:56:04.26ID:GuByYKJZ
ケースバイケースだろ
2022/02/16(水) 22:56:34.84ID:k9K3LRO9
WinUI3のContentDialogは極自然にVMから操作可能ではある
但し厄介なバグがあるんだよな
2022/02/16(水) 23:50:00.59ID:9J2Avx3b
そういうところが最近のMSらしい
2022/02/17(木) 00:27:46.74ID:mxZsFD+m
Windowsのシステムで設定したテーマをそのまま使うと問題ないけど
RequestedThemeでアプリ独自のテーマに変更するとContentDialogの表示がおかしくなる
黒バックに黒文字になったり白バックに白文字になったり

しかしContentDialogをページに埋め込みじゃなくて独立させて作るとと何故かうまく動く
2022/02/17(木) 08:30:25.43ID:RRNNLUq7
>>341
いや、違くない。最初にMVVMとは関係ないと断っている。
だから実装ではなくUXの話。
ちなみにメッセンジャーパターンはアンチパターンだから使うやつは馬鹿。
2022/02/17(木) 08:57:01.84ID:j4TiyS3p
>>348
どうするのが正解?
2022/02/17(木) 13:33:28.92ID:D3Kp3a02
>>348
俺がWPFまだやってた頃、
VとVMの通信の方式でかなり揉めてて
メッセンジャーパターンの確立で
やっとWPF流MVVMのすべての問題が解決!
皆が\(^o^)/ってなってたんだけど
その後なんか動きがあったのかい?

自分はこの頃WPFにサヨナラして
SPAに全振りする事になったんだけど
2022/02/17(木) 13:34:33.35ID:D3Kp3a02
>>VとVMの通信
これ双方向の話ね
2022/02/17(木) 14:37:01.90ID:YUSmIxV4
WinUI3、ちょくちょくデザイナが表示されないってバグ報告あがってて笑った。
まさかデザイナが無いなんて夢にも思わないよな。正式版なのに。
2022/02/17(木) 14:38:43.90ID:/0nSI8jp
WPFに歴史的価値があるとすれば、それは
MVVMは保守性と開発効率を低下させると実証したこと。
354デフォルトの名無しさん
垢版 |
2022/02/18(金) 13:11:59.42ID:J8+KRXGO
既存のFormアプリにWPFのWindowを表示するため
WPFカスタムコントールライブラリのプロジェクトを追加して
WPFのWindowがダイアログで開けたのですが、なぜかFormアプリの
UIコンポーネントが全て小さくなります。
小さくならない方法はありますでしょうか?
2022/02/18(金) 14:23:41.28ID:94FodQmT
>>350
VでVの要素を操作するサービスクラスを生成してVMにインジェクションするのが一番楽だが
詳細を噛み砕いて説明するのは骨が折れるから誰かやってくれ
2022/02/18(金) 17:40:21.19ID:FPiQltqk
>>355
WPF メッセンジャー MVVMでググると上位は大体10年前ぐらいの記事が出てきます
でも多分今でもメッセンジャー使ってる人はいるんだと思う

○○の寄せ集めのQiitaですら代わりの技術の紹介がない
2022/02/18(金) 17:43:40.08ID:NqXxszTV
WPFがMVVMがクソだと証明したからな。
2022/02/18(金) 17:47:22.30ID:FPiQltqk
他のMVVMではこんな話で盛り上がってないもんな
データの射影ぐらいの扱いなのになんでWPFじゃ状態遷移とかその他もろもろ全部MVVMでやらなければならないんだ
どうせ再利用なんかしないのに
2022/02/18(金) 17:54:24.26ID:Sc3FeDVQ
>>358
中途半端な初心者が「MVVMでやらないとバカにされる!」
って強迫観念に囚われてるか、意味も分からずこうやって作るものって思考停止してるか、両方か
2022/02/18(金) 17:58:06.73ID:FPiQltqk
>>359
いやいや
熟練と言うか知り尽くしたほうが危うい
2022/02/18(金) 18:26:19.18ID:TADg4zOp
メッセンジャーパターンまで付き合って
辞められて良かったわーー
苦労しても固有のロジックすぎて
他で全く役にたたないからな
2022/02/18(金) 18:27:26.73ID:TADg4zOp
>>359
当時から、
MVVM至上主義って言われてたよな
2022/02/18(金) 18:45:06.76ID:T3Y33b1k
MVVM使わないで、例えばconfigを設定する画面を想定した場合、

//configからcontrolへ
IdTextBox.Text=config.Id;

//controlからconfigへ
config.Id=IdTextBox.Text;

みたいなのをコードビハインドに書いてるの?
2022/02/18(金) 21:55:43.47ID:+xc5jpMS
HTML/CSSなら思い通りの画面作れるけどXAMLだと作れない。
「技術的に」じゃなくて「自分のスキル的に、っていう意味だけど、
やっぱり参考となるようなsampleの絶対数の少なさがなぁ。
2022/02/18(金) 22:07:10.37ID:tDFU7xrn
WebView2でよくね?
今更こんなオワコン使わなくても
2022/02/18(金) 22:20:20.27ID:eP6qEqnA
話題がループしてるな
2022/02/18(金) 22:31:21.56ID:TADg4zOp
>>365
WebView2をどう使うの?
2022/02/18(金) 22:34:46.53ID:y3Eq57lv
WebView2の人はUIフレームワークとツールキット何使ってる?
2022/02/18(金) 23:51:16.91ID:YtNFK6ow
あー、WebViewでローカルのhtmlとかも表示できるってこと?
だったらそれでいいのかな
2022/02/18(金) 23:55:20.81ID:TADg4zOp
どうやって表示制御するの?
2022/02/19(土) 00:12:02.32ID:v22Fyi01
>>370
C#のオブジェクトをWebView側に渡すことでJavaScript側からC#のメソッドを呼び出したりC#側の状態を参照したりできる
あとは普通にJavaScript側でReactとか使うだけだ
2022/02/19(土) 00:22:40.12ID:UkMRjGML
JS側とC#のやり取りをどうやるか定番ってあるのかな。
あまり聞いたことがないがまさかRESTとかじゃないだろうし。
2022/02/19(土) 00:27:02.29ID:yc9OR0yy
WPFで自前ブラウザー&httpsサーバー作って
SPAをホストする方法ね
中身はReactとか...

自分がSPAに移行するまえに
しのぎでやってた方法
この方式でキオスク端末でまだ何台か動いてるよ

でも今はPWA有るからそっちのが楽だけどね
2022/02/19(土) 00:27:35.44ID:yc9OR0yy
>>372
websocket
2022/02/19(土) 00:28:31.85ID:yc9OR0yy
>>372
electron.NETとかみてみれば
もうWPFの要素ないけど...
2022/02/19(土) 00:32:25.83ID:yc9OR0yy
あとc#とjsの連携のedge.jsというのがある
2022/02/19(土) 00:36:35.88ID:X0wJkiGG
>>368
Svelte
2022/02/19(土) 00:47:45.48ID:UkMRjGML
なんかいっぱいでてきたw
定番とかは定まってないのか。
2022/02/19(土) 00:51:11.00ID:yc9OR0yy
react

変なの選択すると開発者集めに苦労するよ
保守も
2022/02/19(土) 00:59:59.59ID:UkMRjGML
純粋なWebアプリならもちろんReactでいいんだが。

>変なの選択すると開発者集めに苦労するよ

JS on C#ってのが現時点ではそんな気がする。
素直にWPFやFormsでいいじゃん、と。
2022/02/19(土) 01:26:47.51ID:yc9OR0yy
潮流的にクライアントサイド要員はjs(ts)必須ですね
デザイナーの成果物がhtml,css,jsですから
ダサいのは商品価値もさがりますからね

サーバサイドはjava,c#,js,ruby,python(最近は本当に増えてます)いろいろですね

言語統一したかったらjsですね
ただサーバサイドは要員も別のが多いです
2022/02/19(土) 02:10:08.75ID:9cx4u8XC
jsは型が動的なのがなぁ…tsも実行時の型は保証してないし
2022/02/19(土) 03:21:20.16ID:YdSWfk2N
TSの処理系によって型安全レベルが違ってるからねぇ
ありえんけどブラウザがネイティブでTSに対応したら使ってもいいけど
2022/02/19(土) 03:33:01.88ID:yc9OR0yy
クライアントサイドはc#よりtypescriptのほうが書きやすくて圧勝ですね

あとUI開発にはホットリロード必須と思います
Blazorは最悪でした
2022/02/19(土) 07:57:27.90ID:jK3SOMU4
JavaScript(TypeScript含む)は絶対関わりたくない。
こんなの大規模開発に使っていい代物じゃないよ。
JavaScriptが担っていた部分はDartに置き換わってほしい。
あとReact系もさっさと滅びろ。
2022/02/19(土) 07:57:48.80ID:ApZEftHi
>>116のMS製React Nativeがいいんでないか?
もしくは
2022/02/19(土) 08:46:04.71ID:FnhAxPLY
つか、WebView2ならC#とJSのIFは標準で用意されているのに誰も知らないのな
つまり口だけで誰も使っていないということだろ
2022/02/19(土) 09:07:27.13ID:AlOKsuc0
>>354
答えになってないかもしれんが、
FormアプリにWPFを使うなら、formのelementhostにWPFのユーザーコントロールを貼るのがいいと思う
2022/02/19(土) 10:01:52.96ID:yc9OR0yy
>>387
それマジ?
2022/02/19(土) 10:14:08.32ID:FnhAxPLY
>>389
あ、371の人は知っているようだから「誰も知らない」は間違いだな
WebView2のドキュメント見れば書いてあることだ
2022/02/19(土) 10:45:05.98ID:h/hs4NES
.NET5 WPFのListBoxについて質問があります

VS使わずにやってるんですがBehaviorがないと言われます
名前空間もusingしてますが、そもそも無いようで…
別の機種からの投稿なので具体的な名前空間は忘れましたが、サンプル通りのやつです

やりたいことは一つのListBox内の入れ替えや複数のListBox間のD&D操作です
2022/02/19(土) 10:48:21.53ID:v6jasGDT
C#でM書いて渡せばWebView2のJSから直接アクセスできるから、MVVMやってるならVVMの部分がそのままJSとHTML/CSSに置き換わるだけだね
つまりビジネスロジックは完全にC#で書けるわけで、これでなおJSで大規模開発辛いと思うなら、
多分そいつがMVVMだと思っているものはVMにロジック書きまくってるエセMVVMの可能性が高い
2022/02/19(土) 11:31:54.74ID:yc9OR0yy
WebView2
ひっそりとそんなブリッジ機能あったのね
10年前にあれば良かったかな...

日曜プログラマー的に
昔みたくフロントreactでロジックc#で作ってみるかな
2022/02/19(土) 11:32:54.00ID:yc9OR0yy
でもWebView2使った
electron相当のもうあんじゃね?
知らんけど
2022/02/19(土) 11:33:36.90ID:R5yjbcGL
System.Windows.Interactivity.dll → Xaml.Behaviors.Wpf
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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