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/
446デフォルトの名無しさん
垢版 |
2022/02/23(水) 12:16:35.49ID:n7YEN9KD
WPFに真剣に取り組んでも将来仕事があるのか心配。
2022/02/23(水) 12:23:14.34ID:n4QLtIZ7
家でWPFに真剣に取り組んで
日中はコンビニでアルバイト

だいたいこういう生活スタイルになるかな
2022/02/23(水) 13:22:26.22ID:ywzuv89F
>>446
MVVMの第一人者がWPF見限ってWebに移ってるのが全て
2022/02/23(水) 13:39:30.83ID:AYH7H5ZM
>>445
ありがとうございます。.NET6はまだまだということでしょうかね。
2022/02/23(水) 14:42:12.12ID:5YFRSXe3
>>448
それいつの話よ!
2022/02/23(水) 15:28:20.73ID:8ISSr+bj
>>446
「仕事で」というのは随分ニッチ狙いだな。
WPFは個人的に使うツールを作ったりするのに便利。
WPF⇒WinUIに移行する道もあるし。
今は駄目駄目のWinUIも2〜3年後には使えるレベルになってるでしょ。

WebはFlutterに置き換えたい。
JavaScriptはVBAと同じく、プロが使うべき言語じゃない。
TypeScriptも同じ。腐った食材をラッピングしても中身は腐ったまま。
2022/02/23(水) 15:30:22.63ID:A1VwjaQk
WPFを腐った食材と言いたげだな
2022/02/23(水) 15:45:07.83ID:8ISSr+bj
腐ってるのはJavaScript。
誕生の経緯からして大規模開発に使うようなものじゃない。

WPFは頑張ってると思うよ。
Windowsデスクトップ向け開発技術の中ではバランスがいい。
これ選んでおけば困ることがない。
後発が揃いも揃ってヘボすぎる結果でもあるけど。
2022/02/23(水) 16:12:12.81ID:EjF360bu
>>453
WinFormsで十分
2022/02/23(水) 16:17:35.16ID:A1VwjaQk
腐ってると言ってもWPFは納豆なんだよ。好きな人は好きだが嫌いな人は食べない。
2022/02/23(水) 16:23:19.96ID:YdM3SxcO
>>454
.NET FrameworkのWinFormsはスケーリング対応が腐ってるのがな
.NET6のなら改良されてマシになってるけど
2022/02/23(水) 16:28:06.25ID:A1VwjaQk
近所にスケートリンクないんだよな
2022/02/23(水) 16:49:27.74ID:5YFRSXe3
あいかわらずのおじさん...
2022/02/23(水) 16:52:38.52ID:A1VwjaQk
納得くせーガキが背伸びすんなよ
2022/02/23(水) 17:08:22.18ID:Xkg4oOVl
>>454
WinFormsを進化させたのがWPF。
だからWinFormsの代わりにWPFを使えばOK。
2022/02/23(水) 17:35:40.25ID:4nPsDKk4
Flutterってwebもデスクトップもまともに動くんかねぇ・・・
2022/02/23(水) 17:42:10.42ID:zyypBZ1d
flutterはデスクトップ向けに簡単にネイティブAPIつっつけないんじゃないの?
C#ぐらいデカいデスクトップ向けバッテリーがあっても結構頻繁にネイティブ必要なのに。
2022/02/23(水) 18:21:05.11ID:jrR/d40v
flutter webはダメっぽい
CanvasKitのwebasmとか大きすぎてダウンロードが..
そこから..
flutter desktopはok
2022/02/24(木) 08:38:23.23ID:p3uXF2gK
この第一人者ってJohn Gossman?
2022/02/24(木) 15:22:11.77ID:Z10usaaO
WPFで作成したアプリをWindows Defenderが誤検知したんだがMSふざけてんのか?
お前のとこのツールで作成したアプリだぞ
2022/02/24(木) 15:53:17.31ID:uozJ2LSE
>>465
どの開発ツールで作成したかなんて関係ないだろ、アホか?
見られてるのはどんな挙動をするか。
お前と同じ、キョドってるから職務質問されるんだよ。
2022/02/25(金) 08:37:34.40ID:6D5Ibm3F
>>465
納品するソフトで同じ事があった。
2022/02/25(金) 09:03:07.81ID:F30cwVSi
ウイルスがやりそうなことや、お行儀の良いプログラムがやらなそうなこと実装すると結構引っかかる
2022/02/25(金) 09:16:53.23ID:MEIpOner
Webにおくと問答無用で「人気がない」判定されて疑われる
2022/02/25(金) 12:36:04.84ID:n0fLabvp
このスレでflutterとかrustとか知ることできて
ありがたい
2022/02/25(金) 13:03:03.43ID:pyvPoE8E
やはりGUIはFlutterで構築するのが流行るかな
2022/02/25(金) 13:14:04.91ID:yOOIJPZ6
flutterはネストしたスクロール部分で欠陥があるから注意
2022/02/25(金) 13:56:06.11ID:8HeuC971
まあVSのC++のコンソールアプリのテンプレートのHelloWorldをデバッグビルドするだけで
マカフィーはウィルスとして判定するんやけどな...
2022/02/25(金) 14:10:58.39ID:Geimv/XM
マカヘー「今どきC++なんか使ってるやつはウィルス作成者に違いない!ギルティ!」
2022/02/25(金) 16:03:43.25ID:eqYFRIFE
>>472
そもそもUIとしてネストしたスクロールは使いづらいし、
見た目が悪い
2022/02/25(金) 17:52:46.88ID:yOOIJPZ6
ネストしたスクロールってandroidで当たり前のツールバーがコンテンツのスクロールに合わせて表示されたり消えたりするやつのこととかを含む..
まじでflutterスクロールまわり欠陥だらけ

jetpack composeはそうならないことを祈る
477デフォルトの名無しさん
垢版 |
2022/02/25(金) 18:15:02.63ID:yOOIJPZ6
つうか、netflixとかamazonのアプリとかyoutubeとかもネストしたスクロールだろ
縦方向にスクロールさせて個別のトピックで横方向にスクロール
こういうアプリ良くみるけど
2022/02/25(金) 18:28:31.23ID:VyDJtm7x
>>477
カルーセルでしょ
最近のUX言語ではスクロールとはまた別の概念だよ
2022/02/25(金) 18:51:35.45ID:yOOIJPZ6
ネストしたスクロールで方向が違うものを特にカルーセルっていうだと思う(想像)
2022/02/25(金) 19:04:52.93ID:yOOIJPZ6
ごめん>>479はカルーセルじゃねぇな
やっぱ、>>477はネストしたスクロール方向がちがうスクロールじゃね?
481デフォルトの名無しさん
垢版 |
2022/02/25(金) 19:20:06.74ID:yOOIJPZ6
>>478
違う概念というが俺は元からスクロールについていってるんだが
横方向と縦方向と方向が違うが>>476はネストしたスクロール

UI的にカルーセルって言葉使いたいなら>>476はネストした
カルーセルじゃね
2022/02/25(金) 19:54:02.28ID:L/iFS/ue
ネストしたスクロールって親にも子にもスクロールバーが出るようなUIだぞ。
カルーセルはスクロールとは言わずにスライドとかページ切り替えと表現する。
2022/02/25(金) 21:12:24.61ID:yOOIJPZ6
それ以前にデザイン的じゃなくて技術的な観点から複数のコンポーネント間でUIイベントをやり取りしてスクロールを調整する動きをネストしたスクロールと表現してそういう前提で話を進めてたんだが
そこはわかりずらかったっぽいので悪かった
だから>>476のツールバーが消えたり隠れたりする動きも含めたり

androidならNestedScrollViewやらNestedScrollingParent

まぁ、そこらへんがflutterはくそ
2022/02/25(金) 21:29:28.09ID:Mlva5ec6
その辺は何でやってもクソな気が…(やりたくない
2022/02/27(日) 02:20:45.48ID:5PrhB3U9
いまからだとどうWPF勉強したらいいの?
2022/02/27(日) 02:22:27.16ID:o7kRBzLD
MSのドキュメント読むだけだろ。
2022/02/27(日) 08:52:36.15ID:WzYYvDDu
今からWPFなんてやっても仕事ないけどな
趣味なら好きなようにしていいが
2022/02/27(日) 09:40:55.29ID:COEkEbcq
かずきのWPF講座読んで、あとは使うならMVVMライブラリのチュートリアルでもやってみれば
2022/02/27(日) 10:20:56.98ID:ToDUQmf6
もはやユーザーが少なすぎてベストプラクティスもクソもない状態だから、自分の好きなように使えばいいよ
2022/02/27(日) 10:35:00.29ID:fVG8H20B
そうそう。MVVM警察気取りが幅を利かせてた痛々しい時代は過ぎ去ってアーキテクチャ固執主義は間違いだったと実証された。
コードビハインドにガンガン実装しても全然いいよ。
2022/02/27(日) 10:43:34.24ID:npDV8IYK
それは生存バイアスってやつだ
そもそも設計の良い悪いを言い出したらMVVM以前にこんな日の目を見なかったレガシー技術を採用すること自体が明らかに悪いわけで、
そういうことを気にしない人が残ってるだけ
2022/02/27(日) 10:50:36.47ID:NzDgaGJJ
かずきって懐かしいな
いまなにやってんだ?
2022/02/27(日) 10:51:25.63ID:NzDgaGJJ
>>490
WPFのMVVMが基地外なだけさ
2022/02/27(日) 13:45:33.61ID:riGTCXuy
>>487
身近なところや、「WPF 求人」で検索した結果を見ても仕事はあることはある。
他の人気のある言語と合わせて習得しておくのは悪くはないと思う。
2022/02/27(日) 19:41:21.55ID:ZIjTMYhr
MVVMって誇れるほど難しい技術でもないからw
逆にコレがわからないとしたら転職考えたほうが良いかも
2022/02/27(日) 19:44:43.16ID:o7kRBzLD
超ブラックのIT業界いるなら、しかもPGは底辺なのでさっさと転職したほうがいい。
2022/02/27(日) 21:02:08.91ID:Sj1PDpa0
>>492
日本マイクロソフト
2022/02/27(日) 21:12:32.76ID:+/7Q5xyF
>>495
わからないと言うより面倒と言う側面の方が強い
後はどうしたらよいか定番みたいなパターンがなかった
2022/02/28(月) 07:19:19.52ID:bo2jyn1E
今さらDispose()まで必須になったReactivePropety使うならナチュラルに書いた方がシンプルだし分かりやすい
2022/02/28(月) 08:37:02.02ID:yylMWC41
自分的にはReactivePropetyは最初から眼中にない。
ほぼ個人でメンテしているようなものは業務で使うのはありえないし、
わざわざメモリリークの爆弾仕込むようなものだし。
2022/02/28(月) 08:59:25.09ID:4BlM0ozS
>>456
.NET6のWinFormsデザイナ、まだベータ版だぞ。
スケーリング対応も多少改善されてるけど問題点はまだいくつも残ってるし、
そもそも固定配置前提のUIフレームワークは生産性低すぎて辛いだろう。
2022/02/28(月) 12:51:13.26ID:VFLmeVbD
やべー奴がいたw
https://mobile.twitter.com/ohbashunsuke/status/1495900842389610498
https://twitter.com/5chan_nel (5ch newer account)
2022/02/28(月) 13:42:58.27ID:33ipu5gN
>>501
業務アプリだと1画面にビシッとハマらなければならないのでGridでいい
逆にWindowsの「設定」みたいに画面スクロールしてーーとか出したら切られる
2022/02/28(月) 13:59:46.31ID:VFLmeVbD
>>503
Webアプリで目の肥えた客「ウィンドウサイズに応じて最適な項目配置に変わってね。縦長ウィンドウにしたら縦に並べて、横長にしたら横に並べてね。」
2022/02/28(月) 15:06:09.80ID:ki9qQxut
>>504
WinFormsでもFlowLayoutPanelてのがあった気が
2022/02/28(月) 15:41:54.06ID:nNPgEP9f
>>505
客「あっ、そうそう、文字サイズは5段階ぐらいで調節可能にしといてね」
2022/02/28(月) 15:57:41.97ID:ki9qQxut
>>506
それはきついかも…
508デフォルトの名無しさん
垢版 |
2022/02/28(月) 17:03:59.41ID:zvSrYpGE
テレワークで突然解像度1366x768のノートPCとかいう人権のない環境に叩き落された人もいる
古の業務ソフトには縦800が前提かつ、全ウィンドウでサイズ変更不可とかいうクソみたいな仕様を採用してるものが多いので
最下部のボタンが押せなくて仕事にならないって話をもう数件聞いてる
レスポンシブにする必要はないが画面サイズ固定は流石に時代遅れだと思う
2022/02/28(月) 17:20:47.12ID:ki9qQxut
>>508
それはそうなんだがWinFormsの場合はPanelを使った流動的なものでもフォントが変更されるとフォント次第ではコントロールの幅とかが変に…
かと言ってWPFはListBoxとかで工夫を加える場合面倒
2022/02/28(月) 22:55:13.95ID:eK9jJDC4
class ViewModel{
public ObservableCollection<Mail> Mails = ....
}

データグリッドでMailsをbindingして表示します。
データグリッドの各行ににチェックボックスを付けて、例えば一括して削除などの動作をしたい場合、MailクラスにIsCheckedなどのプロパティを追加する以外に良い方法はありますか?
Mailを継承した専用クラスを作ってそちらをbindingする方法も考えましたが、もっと簡単な、あるいは一般的な方法があれば教えて頂きたいです。
2022/02/28(月) 23:25:29.73ID:ARJn3fZ4
UIの状態をあらわすのがViewModelなんだから、Mail用のMailViewModelを作ってそっちにIsCheckedプロパティを追加する



class ViewModel {
 ObservableCollection<MailViewModel> MailViewModels =
}
512デフォルトの名無しさん
垢版 |
2022/02/28(月) 23:28:39.53ID:ARJn3fZ4
MVVM的にはViewにバインドさせるのはModelじゃなくてViewModel
Modelをそのままバインドできる要件ならViewModelを用意せず横着してもいいけど
513デフォルトの名無しさん
垢版 |
2022/03/01(火) 04:27:43.12ID:HvxAN7j1
こんな単純なことするのにも迷うMVVMゴミすぎる
本末転倒だよ…
2022/03/01(火) 08:15:49.02ID:6mHOWi1F
そういうのはMVVMに限らない。MVCだって学んでなけりゃ迷うわな。
2022/03/01(火) 10:13:10.94ID:Hsy6xGe8
ViewModelも使うけど加工する必要がないデータはModelから直接バインドしてます
最初のころは全てViewModel経由していたけど、その意味がわからなくなって
2022/03/01(火) 10:17:26.44ID:77YWD3uc
>>515
MVVM警察だ。お前を逮捕する
2022/03/01(火) 11:08:37.82ID:oU1D/s0E
>>515
Modelってことはコードビハインド?
ざっと触ってみた感じ、ViewModelとModelは別物だね

WinFormsとかみたいな場合はイベントとかで直接View、つまりコントロールをいじってた

これをWeb系みたくデザイナーとプログラマの役割分だけするためにイベントやModelで直接コントロールをいじることを禁止する
もちろん、表示・非表示の切り替えみたいなのは別で

ViewModelを介すことで直接コントロールを操作することを防ぐ

例えばListBoxの中身をデータバインディングした場合、ViewModelを操作(配列に対する操作とか)をしたらListBoxに反映される

…って妄想してる
2022/03/01(火) 11:21:43.44ID:2vaJYGq+
デスクトップ開発にデザイナーなんて職業は存在しない。
2022/03/01(火) 13:08:57.70ID:RNWoyucI
>>517
反映するにはオブザーバブルでないといけない
それがVM
2022/03/01(火) 13:33:00.63ID:xQ0S3wJN
>>518
デザイナーが居る場合はある
XAMLは作ってくれないし、デザイナーの指定したデザインの再現に苦労するのはプログラマだが
2022/03/01(火) 16:14:35.26ID:UDSzZfa0
>>513
だな
522デフォルトの名無しさん
垢版 |
2022/03/01(火) 17:02:09.29ID:mYgN9Bsp
採用すると生産性が落ちるアーキテクチャとか存在意義なくね?
プログラマーのオナニーでしかない
2022/03/01(火) 18:56:30.75ID:Tqcv2px3
>>511
これってMailViewModelの中にMailModelを保持すると思うけど、グリッドコントロールで行を消すとMailViewModelは消えるけどMailModelは消えずに残るよね?
そこは頑張ってコード書いて同期を取るしかない?
2022/03/01(火) 19:34:21.36ID:YC4P/K5p
ストレージから削除するなら
頑張って書いたほうがいい
525510
垢版 |
2022/03/01(火) 19:37:28.19ID:dYFnJIyt
皆さんありがとうございます。
class MailViewModel : Mail{
public IsChecked {
get => _isChecked;
set => SetProperty(ref _isChecked, value);
}
private _isChecked;
}

上記のようなクラスを作ってBindingするのが良さそうに思いました。
2022/03/01(火) 19:51:58.93ID:JcAvsTjQ
>>523
グリットコントロールから行を消すことがメールの削除の操作を意味するようにしたいならMailModelも消す
単に非表示にしたいだけとか、ゴミ箱に入れておいて復活させるようにさせたいとか、色々考えられる
だからViewModelが欲しくなったのさ
2022/03/01(火) 20:12:49.81ID:Tqcv2px3
>>526
なるほど。ケースによって対処は変わるよね。
ありがとう。
2022/03/02(水) 06:20:23.82ID:2pV2z6cL
Electronの葬式準備はできたか?
https://github.com/tauri-apps/tauri#comparison-between-tauri-and-electron
2022/03/02(水) 18:19:13.15ID:aIp73SHF
rustとか新しいのぼえとうないなぁ
2022/03/03(木) 05:36:04.02ID:uxaiIIsi
>>528
これは楽しみだな
2022/03/03(木) 09:44:18.37ID:Y3c36uTI
ここまで普及したElectronの牙城を崩すのは無理な気がする。せいぜいGoレベルだろう。
Electronがディスク使用量もメモリ使用量も超重量級なのは不満に思ってたけど。
2022/03/03(木) 10:21:20.83ID:8QQBVbSl
viewをhtmlとcssで書けないとつまらんよ
デザインがしょぼくなる
2022/03/03(木) 10:21:59.75ID:8QQBVbSl
WPFレベルでよければ可なのかもしれんが
2022/03/03(木) 11:12:38.88ID:4Us9YDJC
しょぼい方が評判良くて、デザイナーの自己満足全開デザインが使いづらい・分かりにくいと不評なのが現実
2022/03/03(木) 11:17:10.50ID:8QQBVbSl
>>534
あんたがセンス無いだけ
2022/03/03(木) 11:25:49.76ID:4Us9YDJC
>>535
まあそうやって逃げるしかないよな。
お前の仕事は無意味だって認めることになるんだから。
2022/03/03(木) 11:41:18.82ID:OeErkjB1
碌に使いもしないが権限だけは大きいエライオジサンのせいで見た目だけは派手だが使いづらいものになるのはまれによくあること
2022/03/03(木) 17:34:06.50ID:8kQ1SF/V
デザインセンス云々は置いといてhtml+cssのほうがデザインの幅が広いのは確か
予算があるならデザイナーにも頼めるしね
2022/03/03(木) 23:32:59.05ID:hgALKmrt
WPF+MVVM+Rxの実装について勉強中です
それぞれの各機能はなんとなく掴めてきたのですが、実装する場所や通知の受け取り方がまだ分かりません
例えばObservable.Intervalで指定した時間ごとにDBアクセスし、更新があれば通知するという処理はどのクラスに書くべきなのでしょうか
なんとなくですが、Mで実装しVMに通知、Vに表示と考えています
2022/03/04(金) 08:04:23.26ID:shwqyc/K
>>539
MVVMはあくまで、GUIの設計パターン。
DBアクセスのようなアプリの内部処理は
Mで包んでGUIの処理から隠されるので、
MVVMの処理フローには一切出てこない。

Mの原則は「GUIから見える状態に変化があれば通知する」。

この場合は、DBアクセスし、更新があり、
その結果としてGUIが更新が必要になったら、
Mに通知させるという処理になる。
2022/03/04(金) 09:46:05.06ID:EayDkyd8
大変わかりやすい
2022/03/04(金) 12:16:19.88ID:p2+DzLBF
お気に入りのアプリがWPFで実装されてて公開されてるから古いUIをWin 11のUIに合わせたくてForkしてWinUI3.0に対応させようと思ったらWindows App SDK 1.0だとAcrylicやMicaに対応してないとかズコーだわやっぱアホだわMSやることがすべて片手落ち
結局サードパーティー製のAcrylic実装を使う羽目になったわけだがこっちもろくすっぽメンテされてなくてWin11に対応してなくてダブルでズコー
たまにやる気になってプライベートでいじろうかと思ったらこれだからMSの開発環境ってマジでどうしようもないな
誰かWin11とVS2022で使える無料のAcrylic実装しらんかね?
2022/03/04(金) 12:27:44.21ID:7Zhud46/
>WinUI3はまだ完成していません。

一応MSもその認識はあったのね。
あんなお粗末な出来で自信を持って1.0として出したわけじゃないのね。
2022/03/04(金) 12:43:20.96ID:jlehksZI
>>542
WinUI選ぶくらいならこれ。

Flutter for Windows
・fluent_uiパッケージ
・flutter_acrylicパッケージ

Windows向けはまだ出たばかりだけど、
現時点の機能・品質、
フレームワークとしての出来、
将来性、
開発者の期待度
どう考えてみてもWinUIがFlutterに蹴散らされる未来しか思いつかない。

WinUIは

「これが最新らしいし、やってみるか」

「えっ?なにこれ、こんなしょぼいの?こんなこともできないの?」

って感じでちょっと触って実情に愕然として、さーっと離れていく。
2022/03/04(金) 16:27:48.56ID:KOjBrP/m
fluent_ui実際使うとちょっとアレ

modernwpfもそうだがやっぱ個人メンテじゃなー
Microsoftが手がけろよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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