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
2024/09/22(日) 15:05:49.99ID:S8Wcp08P0
個人の場合はね
仕事でだとまず有料になるな
2024/09/22(日) 15:36:53.15ID:ta0kecSE0
C#の一番の強みは、OS、フレームワーク、IDE、DB、等々全てMSが用意したものを使えばよくて、
雑多な周辺技術に惑わされて時間を無駄にしなくて済むこと
…だったんだけど、最近ではもはやC#の役割としてMSが本気で投資してるのってAzure上でのWeb開発だけになっちゃって、
もはや以前の万能言語の姿は見る影もない状況なんだよね
せっかく幅広いプラットフォームで使えるようになったのに、結局特定のプラットフォームに縛られた言語を脱せずに斜陽期を迎えてしまった
2024/09/22(日) 16:46:23.77ID:PYPfkdWx0
いるよね、こういう極論言い出すやつ
2024/09/22(日) 18:07:15.37ID:gYNuxiJB0
C#の用途はWindowsアプリとUnityだよ
他にもできることはたくさんあるけど他の言語に負けないのはこの2つ
2024/09/22(日) 18:39:17.13ID:BOSasojX0
Javaの糞性はメンテナンス工程で発覚する物が多いからなぁ
2024/09/22(日) 18:51:54.26ID:S8Wcp08P0
いつからC#は万能言語になったんだ?
少なくと複雑なUI実装にはまったく向かない
2024/09/22(日) 19:36:50.02ID:BOSasojX0
複雑なUIってのがCADとかDAWを超えているならWinAPIから作れや(^^)v
2024/09/22(日) 19:59:22.99ID:cBjFnGUy0
複雑なUIもC#は他を圧倒してるよ
UnityよりすごいUI作成ツールって他にないだろ
2024/09/22(日) 21:57:29.60ID:S8Wcp08P0
HTML
2024/09/23(月) 01:02:32.56ID:qQQw0l+l0
paint.netがwin32APIを直呼びしている時点でお察し
2024/09/23(月) 01:50:28.88ID:l6I+Mk/q0
paint.netはGPUアクセラレーション使うから仕方がないでは
最新のVer.5.0ではレガシーなC++/CLIのコードをC#に置き換えてるそうだけど
2024/09/23(月) 11:22:29.89ID:EQovMdIGM
非常に何とも言い難いね
自分もC# C++ハイブリッドでやってるけど非常にめんどくさい
でも速度的にメリットがあるので続けるしかない

一般的なコードで等価なコードが等価なバイナリになればいいけど無理だな
2024/09/23(月) 12:37:41.02ID:l6I+Mk/q0
安全寄りの設計思想のC#が無防備なC++に近づくのは限界があるわな
とは言え、最近の.NETは高速化に力入れてて.NET Frameworkと比べると結構速くなった
103デフォルトの名無しさん (ワッチョイ ef0c-/y0s)
垢版 |
2024/09/23(月) 16:00:40.00ID:m8hlisxc0
C#もSpan<T>とかSIMD叩けるようになったりして久しいし.Netのバージョンを指定できる環境ならそれなりに高速動作するのでは?
2024/09/23(月) 16:40:20.64ID:9pAijtDI0
WinUI3がAOT実装したのに話題にならないね
ちょっとした高速化以上に今まで悩まされた難読化が標準になったのにさ
2024/09/23(月) 21:25:13.93ID:CEJbx0xL0
進撃の巨人はオワコン
2024/09/23(月) 23:44:36.17ID:7O7coEBZ0
winUI3のdatagridでitemsourceに指定してあるObservableCollectionを変更しても画面が更新されない…
セルを更新したときに下のセルが空欄なら同値で埋めたいんだけどObservableCollectionの値は更新されてても画面が変わらないのはどうすればいいんですか?
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大好きだしなあ
レスを投稿する