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

1デフォルトの名無しさん (ワッチョイ 835a-A2Rd)
垢版 |
2024/08/20(火) 21:16:46.38ID:mRLJAUv40
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

WPF(Windows Presentation Foundation)について語るスレ。

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

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

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
107デフォルトの名無しさん (ワッチョイ ef0c-/y0s)
垢版 |
2024/09/23(月) 23:52:09.53ID:m8hlisxc0
>>106
ObservableCollection<T>のTにもINotifyPropertyChangedの実装が必要
2024/09/24(火) 09:51:13.74ID:/2yiAcKTp
複雑なUIを妙なスクリプトで対処するなよ
改修大変なんだわ
109デフォルトの名無しさん (ワッチョイ 2701-lUwY)
垢版 |
2024/09/25(水) 07:29:58.87ID:i/kzvIdf0
WPFはCG以外の各種コントロールもDirect3Dで描いてんの?
2024/09/25(水) 07:37:44.91ID:Jf+yMjnA0
CGの定義はともかく、今のWindowsはWPFとは無関係にほとんど全てをDirect3Dで描画している
WPFは更にその上で無駄な抽象化レイヤを幾重にも重ねてDirect3DやCPUで描画しているので極めて非効率
2024/09/25(水) 09:21:52.51ID:p6KYxCK00
WPFはDirect3D9のラッパー
そしてこれがWPFがWindows以外の.NETで提供されない理由
2024/09/25(水) 09:49:59.93ID:UXiRrgGj0
むかしsilverLightがあったじゃん
あれはどーーなの?
2024/09/25(水) 10:18:56.91ID:GD37s86yp
xamlはスクリプト言語で、C#に変換さるるんじゃなかったっけ?
2024/09/25(水) 12:26:08.34ID:alLhlB9H0
されない。等価なバイナリデータに変換された上で、C++で書かれたランタイムがそれをレンダリングする。
ただしXAMLの最古のレガシー実装であるWPFについてはXAML処理系はC++ではなくC#で実装されており、パフォーマンス上のボトルネックとなっていた。
2024/09/25(水) 15:11:10.64ID:8lhO0QOxa
silverLightは息してない
即死
2024/09/25(水) 19:01:26.39ID:5Vhwl/nZ0
PRキャラの光ちゃんを助けて
2024/09/25(水) 19:02:00.62ID:UXiRrgGj0
>>111
silverLightは >>111 に対する話し
118デフォルトの名無しさん (ワッチョイ 2701-lUwY)
垢版 |
2024/09/25(水) 20:44:46.39ID:i/kzvIdf0
>CGの定義はともかく、今のWindowsはWPFとは無関係にほとんど全てをDirect3Dで描画している
WinFormsも?
テキストボックスもDirect3Dなんだ。なんか面白いな。
119デフォルトの名無しさん (ワッチョイ 6320-VZV9)
垢版 |
2024/09/25(水) 22:17:03.73ID:Xu8aizIi0
逆にWindowsでパフォーマンスの良いGUIフレームワークとなると何が候補になるの?
2024/09/25(水) 22:57:15.89ID:EcYO77Ak0
React
2024/09/26(木) 08:04:02.48ID:dpiVYcoi0
WebView2やElectronでReactを使うのが最良だろうね。メモリ消費量は多めだが複雑なGUIを極めて高速に描画できる。
WinUI系は迷走しまくってるからお勧めできない。
2024/09/26(木) 08:46:53.86ID:5j0XXcTR0
Reactが高速w
2024/09/26(木) 10:21:05.96ID:5M+OW9vAp
webベースは却下
2024/09/26(木) 10:44:19.65ID:R5lWYvWFa
Tcl/Tk
2024/09/26(木) 10:58:22.15ID:2ZTCXRzi0
>>123
なぜ?
2024/09/26(木) 12:03:31.39ID:vw75CWGjM
10年後に動くとは思えない
2024/09/26(木) 14:30:49.45ID:O7j1NTfr0
WPFはね
128デフォルトの名無しさん (ワッチョイ ef81-/y0s)
垢版 |
2024/09/26(木) 17:10:50.13ID:5GwSM86j0
VB6.0もWinformsもWPFも公式にしろ非公式にしろ10年後も動いてると思うたぶん
ソースがあればビルドもできると思うたぶん

でもElectron上のアプリが10年後も動いてるかと言ったら…
そもそも10年後にビルド環境を用意できるかどうかとなると極めて怪しい
2024/09/26(木) 19:41:09.21ID:dpiVYcoi0
そりゃ思い込みだな
ReactとElectronのリリースは11年前、最も成功したElectronアプリであるVSCodeもなんと9年前だ
SPA系のモダンWebも実は既に十分に枯れた技術なんだよ
130デフォルトの名無しさん (ワッチョイ 2701-lUwY)
垢版 |
2024/09/26(木) 20:32:23.63ID:7pm6jv2b0
WPFでSkia使えばめちゃくちゃ早いが。
131デフォルトの名無しさん (ワッチョイ ef81-/y0s)
垢版 |
2024/09/26(木) 21:39:21.10ID:5GwSM86j0
>>129
いや言ってる意味がわからないならいい
2024/09/26(木) 21:49:40.33ID:eQdJKLVp0
>>129
11年前のコードがそのまま動くとでも?
133デフォルトの名無しさん (ワッチョイ 2701-lUwY)
垢版 |
2024/09/26(木) 22:47:15.58ID:7pm6jv2b0
たまにVC++6.0使っとるが。
2024/09/27(金) 07:49:49.43ID:UPJ9A3G20
VB6.0のように動かすだけならできるだろ
何が極めて怪しいんだ
2024/09/27(金) 07:55:31.74ID:/K2li3dr0
あと10年経つと文字小さすぎて読めないとかボタン小さすぎて押せないとか言われてると思われる
ViewBoxなんてカレンダーコントロールにしか使ってなかったが、対処療法には使える
2024/09/27(金) 08:05:02.49ID:UPJ9A3G20
VB6.0が動くの正確な意味って解像度とか作成時の状態を踏襲した上でって意味だろうに
なんでそれと同じ条件で語らないんだか
2024/09/27(金) 11:39:56.03ID:4PrSawPF0
>>134
普通に無理やろ
VB6はruntimeが脆弱性対応で更新されてもそのまま動くし既存のOSが生きてる限りサポートされることが約束されてる

Reactのホスト環境はそうはいかない
ホスト環境やReact自身の更新に追随して変更していかないと使えない

環境を凍結して動かすだけならハードに問題ない限り動かせるけどそういう話じゃないだろ?
2024/09/27(金) 13:01:50.28ID:2H6QqaiG0
もういいよ react の話は
2024/09/27(金) 13:22:48.25ID:kLvVhYwY0
>>137
Reactのホストって何よ
基本クライアント側だけで動く機能だぞ
2024/09/27(金) 13:31:54.31ID:H3snXt7I0
>>139
JavaScriptがホスト環境無しには動かない言語なのは知ってる?
2024/10/01(火) 19:10:58.55ID:dt9mkk9o0
ElectronはChromiumを丸ごとバンドルするんだから全部塩漬けにするなら10年後でも普通に動くだろう
セキュリティパッチ云々はまあ.NET Framework の方ならわかるが、
5以降ならクライアントアプリは全部バンドル塩漬け前提になってしまってて、
後生大事にセキュリティ更新だけ当て続けるような運用はもはや不可能なんで、
状況は大して変わらんよ
2024/10/01(火) 20:26:18.35ID:J7GPtKrz0
JavaScript界隈は数十年前のDelphiのEXEやランタイム糞でか問題を現在進行形でまだやってるんだよな
ブラウザ側に金玉握られてたらエンジンごと抱え込むしかないよなあ
ほんと頭悪いわ
2024/10/01(火) 20:27:44.35ID:zBjh5U/o0
htaが神過ぎたな
2024/10/01(火) 20:56:36.69ID:dt9mkk9o0
>>142
.NETも今はCLRから何から全部抱え込むのが基本よ
2024/10/05(土) 19:46:33.97ID:QCQZKClw0
AvalonEditが高速で気に入った
1メガ位のテキストをTextBoxに放り込んだら重くて大変だったけど快適になったわTextBox使えないわ
146デフォルトの名無しさん (ワッチョイ dfe2-mIju)
垢版 |
2024/10/08(火) 23:02:49.61ID:pQ+vP70p0
今からWPFを勉強する際におすすめの参考書やWeb資料ってある?
2024/10/09(水) 00:39:16.52ID:N2h11Yh4M
ないよ
2024/10/09(水) 00:52:19.76ID:N2h11Yh4M
WPFはすでに終わった技術で行き止まりみたいなものでMSもそこを広げていこうとはしてない
新たに入ってこようとする人間もあまりいないので書籍がない
説明資料もない
素の状態では使いづらいのでライブラリを使うけどそのせいで人がばらけてる
それもずっと研究段階で絶対こうしたほうがいいと言う統一した使い方がない
過去のweb資料も時代遅れになっている
2024/10/09(水) 07:33:01.17ID:+lBoFbSl0
他の言語したことあるならネットの情報だけで学べるやろ
150デフォルトの名無しさん (JP 0H4f-6k2q)
垢版 |
2024/10/09(水) 08:28:12.38ID:ODDYjXGdH
WPFと言ってもWinFormsとかわらんし。
XAMLはテキトーにサンプル作ればその内わかる。
(最初はポトペタでもいいと思ってる)

データバインドはWinFormsにはないけどバインドする必要もないし。

https://qiita.com/inf102
qiitaにはそれなりにある。
2024/10/09(水) 08:32:36.58ID:I+S9acjo0
MVVMパターンやデータバインディングにこだわりすぎるとハマる
2024/10/09(水) 09:04:02.74ID:LZH5WMbK0
データバインディング、テンプレート等とWPFのMVVMは分けて考えるべき

初学者には絶対無理だけど
153デフォルトの名無しさん (JP 0H4f-6k2q)
垢版 |
2024/10/09(水) 14:18:46.27ID:ODDYjXGdH
非MVVMのWPFが自分的にはサイコー。
50-60人〜 の大規模での開発なければMVVMの恩恵はない。
2024/10/09(水) 14:36:12.29ID:GBd6hExlM
mとvmの境界が分からない
IPropertyChangedがあればvmになるの?
Commandの中身はvmじゃなくてmに書くべき?
2024/10/09(水) 16:00:23.92ID:7juExw200
難しく考える必要はない。
VMの仕事はMの状態をビューに反映させることと、Mに対して何らかのコマンドを送出すること、それだけ。
コマンドってのは例えば梱包済み商品の発送処理を開始せよ、みたいなやつね。
発送処理開始ボタンが押されるとVM上のイベントハンドラが実行される。
なお、MVVMではこのイベントハンドラをコマンドハンドラなどと呼ぶことがあるが、上記のコマンドと紛らわしいからここではイベントハンドラと呼ぼう。
そして、イベントハンドラは関連するパラメータと共に発送処理クラス(これがMに相当)の処理実行メソッドを呼ぶ。これがコマンドの送出だ。
そしてVMはメソッドの戻り値等を介して「発送処理中」ステータスに更新された受注情報のリストを受け取り、その内容を自らのプロパティに反映する。
結果として、画面上の受注情報のステータスが更新されることになる。
泥臭い話と思うかもしれないが、君の憧れるMVVMやドメイン駆動といったアプリケーションアーキテクチャのキラキラワードの実態は本来こういうものだ。
2024/10/09(水) 16:26:14.31ID:LZH5WMbK0
別にMVVMを全部コードで書いてもよい
これからわかることは...
2024/10/09(水) 17:57:57.80ID:Fy3THiM40
WinUI3 でバリデーションエラーをTextBox に表示するのってどうやるの?
INotifyDataErrorInfo はあるし
VisualState にもそれっぽいのあるからできると思うんだけど。。
158デフォルトの名無しさん (ワッチョイ df24-mIju)
垢版 |
2024/10/09(水) 22:40:18.12ID:EgWGnFmO0
「ViewModelはViewのための橋渡しをするだけで、他のロジックはModelが持つ」と理解したんだけど、例えば以下のような感じ?

数値カウンターアプリを作る場合にCounterState みたいなモデルを用意して、「現在値」というプロパティと、インクリメント/デクリメントするためのメソッドを実装する
ViewModelはそれを画面の表示やボタン動作に紐付けるために、「現在の値」というプロパティと、ボタン押下時のコマンド (内部的にモデルのインクリメント/デクリメントメソッドを呼ぶ) を定義する

……といった具合の実装をMとVMとで行うと理解したんどけど、合ってる?

役割は違うけど、VMとMとで同じプロパティを書く冗長さがある感がする
INotifyPropertyChangedみたいなWPF特有の知識をModelに持たせない、という考えは納得できる
2024/10/09(水) 23:50:39.69ID:dETTV3dXM
こういう不毛な話を20年続けてる
2024/10/10(木) 00:48:19.73ID:Y9XtQuCJ0
ましで
2024/10/10(木) 10:13:58.71ID:6yZTy5dIM
>>153
変更イベントでTextをintに変換とかいちいちしてるの?
2024/10/10(木) 11:08:47.70ID:Ulhr2nl60
>>158
それで正しい
面倒ならCounterStateを完全にイミュータブルにして、そのインスタンスを直接プロパティで公開してしまえばいい
それならCounterStateがINotifyPropertyChangedを実装する必要はなくなる
その方がReactなんかのモダンWebアーキテクチャに近い今時の構造になるが、WPFの場合は更新時にモデル全体を差し替えるようなことをすると更新範囲が広くなっちゃうからパフォーマンスは犠牲になる
2024/10/10(木) 18:21:44.49ID:bR/Ks12r0
PropertyChanged.Fodyも[ObservableProperty]も使ってないって情報古すぎる
今時手書きはないよ
2024/10/11(金) 01:00:45.44ID:V8K6PYDOd
質問者が問題視しているのはプロパティの重複とWPF特有の要件をMに持ち込むことだから、
それらのツールは何ら本質的な解決にはならないでしょう
2024/10/11(金) 07:34:33.39ID:D2KvZw8t0
xamlってWidth={Binding Path=vm.Width×0.9f}
みたいな形でバインディングプロパティを加工出来ないのがつらいよな
Converterあるけどあれだと0.9fとか0.5fとかいろいろなサイズに対応するために複数のコンバーター作らないといけないし
2024/10/11(金) 09:21:28.65ID:CgGvZ7IF0
WYSIWYGなGUIビルダーが前提の時代遅れな設計だから仕方ない
Reactなら普通に式書けるが、ああいう手書き前提のアーキテクチャではビジュアルデザイナを実装するのが困難だ
業界がまだRADの幻想に囚われていた時代の遺物よ
2024/10/11(金) 12:38:14.23ID:LpW4FRFf0
>>165
ConverterParameter
2024/10/11(金) 15:03:42.73ID:aU2XMHpS0
今からデスクトップアプリは何で開発すればよいの?結局、未だにWPF?
2024/10/11(金) 15:07:40.13ID:oAJpwo350
Tauri
2024/10/11(金) 17:27:07.45ID:CgGvZ7IF0
WebベースならElectron、Tauri、WebView2あたり
Webが嫌なら、もはやWin向けではMS謹製となった React Nativeだな
2024/10/11(金) 17:54:11.45ID:D2KvZw8t0
>>168
簡単な奴ならWinUI3でいいけど業務アプリとかガチめのやつはWPFが安定
2024/10/11(金) 17:55:27.19ID:D2KvZw8t0
>>167
ありがとう
こんな機能あったんだね
2024/10/11(金) 19:42:24.84ID:LpW4FRFf0
>>172
あとConverterにプロパティを書いておくと、x:Keyと一緒に指定できるよ
174デフォルトの名無しさん (ワッチョイ df93-mIju)
垢版 |
2024/10/11(金) 22:22:51.77ID:S/LAlpyb0
Web系ならGo製のWailsという選択肢もある
Tauriよりもビルドがだいぶ早い (RustはC++と同様にビルドが長くなりがち)

ただしElectron等はWeb系のフロントエンドの知識 (TypeScriptだったり、フレームワークやCSSだったり) が必要だから、C#に慣れてるならWPFになると思う
自分は試したことないけど、Avaloniaも評判は良さそうに思える
2024/10/11(金) 22:39:29.66ID:e+urK+rQ0
Webベースで作る時に、見た目をWindows風にするスタイルシートってある?
2024/10/11(金) 23:27:08.82ID:TQ53xTM/0
>>175
Webならなんだって出来る
https://paradoxepoch.github.io/win11-css/
177デフォルトの名無しさん (ワッチョイ 8b73-1n8d)
垢版 |
2024/10/11(金) 23:43:34.27ID:TQ53xTM/0
>>175
こっちだったね
https://github.com/Laaouatni/w11CSS
2024/10/11(金) 23:45:25.83ID:V8K6PYDOd
それこそReact Native使えば?
UWPだからWindows風どころか正真正銘WindowsネイティブUIよ
2024/10/11(金) 23:49:11.62ID:VNXwNI6H0
>>177
開発止まっとる
2024/10/12(土) 00:48:02.73ID:Om8PnXVB0
Webなら格好いUIつくれんのに
Windowsの古めかしい方に寄せるのは何故?
2024/10/12(土) 01:37:01.36ID:pKFLyiMR0
>>180
客に「違和感がある」とか文句付けられないようにするため
2024/10/12(土) 02:33:02.01ID:2unSxFzS0
Windowsアプリなんだから格好いい悪いじゃなくて他のWindowsアプリと揃えなきゃだめだろう
まあネイティブとWebViewだとテキストボックスの挙動すら違うんだけどな
2024/10/12(土) 08:38:27.68ID:Om8PnXVB0
windowsのアプリとかみんなバラバラじゃん、OS周り以外は

ダサくて使わないけどfluentUI
https://react.fluentui.dev/
2024/10/12(土) 08:42:51.92ID:dtNF+rDsM
そろそろスマホでもアプリの時代が終わりつつある
些細なことでアプリを入れたくないと言う心情は理解出来る

スマホに100以上アプリ入れてどこに何があるのかもわからないし要らない通知ばかりされる

アプリはもうすぐ死ぬ
2024/10/12(土) 08:44:53.19ID:dtNF+rDsM
サービスは主要なインフラアプリに統合されて
ツールはツールで残る
2024/10/12(土) 08:47:19.10ID:Om8PnXVB0
Material UI: https://mui.com/
Ant Design: https://ant.design/
2024/10/12(土) 09:33:49.34ID:13mgHY9H0
react nativeってopenGLとかopenCV使える?
2024/10/12(土) 11:36:56.71ID:SicHpmLd0
>>183
リアクトのfluentUIダサいよな
WindowsのfluentUIはそこそこかっこいいんだが
単純にアクリルがあるかないかの違いかもだが
2024/10/12(土) 15:13:33.54ID:iNamx5U/0
Blazor HybridでFull C#がいい
TS/JSのエコシステムを組み入れる必要がないから
MSスタックで長くやってきた会社には向いてるはず
2024/10/12(土) 20:26:13.92ID:97+nJc5Rd
いくらMSどっぷりといえど、HTML/CSS使えるのにJSできないというのは考えにくいでしょ
そもそもMSってなんだかんだJS大好きだしなあ
2024/10/12(土) 23:44:20.49ID:2unSxFzS0
そもそもGUIってのはアプリごとに操作を覚え直さなくていいようにパーツを統一するところから始まってるわけで
WindowsもXPぐらいまではかなりのレベルで統一されてたはずなんだ…

Webアプリが主原因だけどWPFアプリの見た目がWin32とちょっと違ったのも一因だよな…
2024/10/13(日) 01:44:41.67ID:j6St0Zu00
>>191
そりゃないね
VSCが馬鹿でかいボタン集めて作られてもかなわんからな
2024/10/13(日) 10:34:56.19ID:ii5+beJfd
VSCode含め、最近では不特定多数向けのGUIアプリって基本的にMacで開発されているものが多いから、
Windowsの作法なんてそもそも開発者の眼中にないんだよ
Macはむしろ伝統的にWin以上にOS側でUXを統一する思想が強かったわけだけど、Apple陣営としては開発者の取り込みのためにはWeb開発者に迎合せざるを得なかった
そして結果的に当のApple陣営の存在がアプリの独自UX化を強力に助長してしまったというのは皮肉な話だ
194デフォルトの名無しさん (ワッチョイ 9f46-r4Ei)
垢版 |
2024/10/13(日) 10:42:53.21ID:t+94VYTX0
Avaloniaってどうなの
Blazor Hybridとどっちがいい?
2024/10/13(日) 10:45:20.07ID:K8QjVhgfM
個別のアプリと言うもの自体が死にかけてるからなんでもいいんじゃないかな
今がピークで本当にマルチなGUIはドンドン必要なくなってくると思うよ
2024/10/13(日) 11:27:03.11ID:KMuly+QI0
ここってWPFかWinFormsしか使えないジジイたちが時代についていけずアレがいいのか?コレがいいのか?と右往左往するスレだよな
2024/10/13(日) 11:30:10.00ID:USukL5ei0
>>193
言うてMacOSは今でもOS標準アプリは一貫した作法のままだしな
標準アクセサリですらまるでバラバラなWindowsは格が違う
2024/10/13(日) 12:03:48.62ID:pdU5irXc0
>>196
色々な技術が乱立していて自分で主体的に取捨選択しなきゃいけないのは決して今に始まったことじゃないんだけどな
お仕着せのMSスタックに身を預けることしかしてこなかったジジイたちが、ここにきて遂にMSに梯子を外されてしまい右往左往している構図
199デフォルトの名無しさん (ワッチョイ fbb4-+sfS)
垢版 |
2024/10/13(日) 13:03:58.52ID:ruoQpPM20
梯子外しって何のこと?
今も現役だし、サポート終了の話が出てるわけでもないぞ
新機能が追加されるようなことは無いだろうけど
2024/10/13(日) 13:41:08.23ID:K8QjVhgfM
MS的にはUWP→WinUI3を追いなさいと言うことだけど
それもネイティブアプリ自体が死にかかってるので微妙
2024/10/13(日) 14:11:47.46ID:j6St0Zu00
ネイティブアプリ作る案件は
あってもモバイルだけだかんな
202デフォルトの名無しさん (アウアウエー Sa3f-mL/d)
垢版 |
2024/10/13(日) 14:42:54.77ID:UZT3uuKDa
UWPは将来性危険なので避けたいな
2024/10/13(日) 15:16:30.57ID:0ZAxqEdHM
>>184 >>201
ネイティブアプリから、Webアプリに変わってきているということ?
204デフォルトの名無しさん (ワッチョイ fbb4-+sfS)
垢版 |
2024/10/13(日) 15:35:40.96ID:ruoQpPM20
>>203
トレンド的にはそう
とはいっても、一般ユーザーの目に入りにくいだけでデスクトップアプリの開発は今も普通にあると思う
エンタープライズ系だったり、CADや解析ソフトだったり、計測器の制御だったり
2024/10/13(日) 16:24:37.75ID:ZFUcuNx5M
んでその一般向けのモバイルアプリ開発ももう多分徐々に下火になってくる
この前どこかの市で1億3000万かけてモバイルアプリ作ったけどインストールしたのは400人ってニュースがあった

特定の案件以外はweb+LineやXですませばいいんではないかと…そういう流れになるはず


一般人はスマホに入れてるアプリは50ぐらいらしいけどそれでもうアップアップ
各種スーパーやドラッグストアに行くたびにアプリ入れてたら10個ぐらい入れてる
コンビニはまた別
それ以外にもレストランやファミレスとか回転ずしとかのアプリが合ってアホがどんだけ囲い込みしたいんだよと思うわ
2024/10/13(日) 17:37:12.38ID:pdU5irXc0
ああいう会員アプリの目的は囲い込みではなく顧客の識別と購買情報なので、入れておいてくれるだけでいいんだよ
Webだとセッション切れたらITリテラシーの低い一般人は高確率でパスワード忘れて再ログイン不可になる
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。