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

■ このスレッドは過去ログ倉庫に格納されています
2022/10/29(土) 11:34:34.12ID:OGteGRtm
WPF(Windows Presentation Foundation)について語るスレ。

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

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

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
2022/11/10(木) 22:01:06.12ID:zhxwh4fX
> どうせドッキングウィンドウに対する要件も高度に特殊化されてるから標準で用意する意味はない
要件なんてたいてい一緒だろ
適当な事言いすぎ
2022/11/10(木) 22:23:19.35ID:zhxwh4fX
AvaloniaUI
https://github.com/wieslawsoltes/Dock
WPF
AvalonDock
まぁ、商用ならたくさんあるが
WinUIは3年前くらいのロードマップにもResearchかなんだかでDockingの言及あったが消えた
まぁ、WinUIもそうだが人的リソースさかないでやる気ないだけ
2022/11/10(木) 23:00:05.70ID:yMTwAnCT
Project Reunionとかつけてたくせにやる気ないのか
173.NET MAUI HighSchool
垢版 |
2022/11/10(木) 23:20:44.15ID:oMPYiM7T
>>171
アヴァロンドックは有名だよな
VisualStudioっぽいUI
2022/11/10(木) 23:51:31.93ID:lDQmNpkM
>>169
MVVMはWPFのが酷すぎてというのがまともな感性ですな
2022/11/11(金) 07:38:09.36ID:VNOGdawE
WinFormsで新しいバインドとかやるのか…WPFも弄れよ…
2022/11/11(金) 11:34:14.50ID:9kenv454
>>166
しゅごい…!
2022/11/11(金) 11:45:21.38ID:Uq5PXeTC
https://devblogs.microsoft.com/dotnet/wpf-on-dotnet-7/
一方WPFはコミュニティによる簡単な性能改善とバグ修正のみか
WinFormsがHDPI対応強化とMVVM対応って、もうこのスレでよく言われてたWPFを使う理由が無くなっちゃったな
ボタンを回転させたりするくらいか
178.NET MAUI HighSchool
垢版 |
2022/11/11(金) 12:27:03.46ID:kw0okeTL
>>176
それReactだよ…
179.NET MAUI HighSchool
垢版 |
2022/11/11(金) 12:27:30.55ID:kw0okeTL
>>177
デザインも古臭くなっちゃったしな
2022/11/11(金) 12:27:47.44ID:8WOXnYS7
メタが倒産したらReact死んでしまうん?
2022/11/11(金) 12:49:47.05ID:9kenv454
>>178
React万歳!!

>>180
そのときはVercelが引き継ぎそう
2022/11/11(金) 13:51:03.30ID:q6l5EPJl
WinFormsのダークモードの可能性にも言及されてるよな
一方のWPFは..
183デフォルトの名無しさん
垢版 |
2022/11/11(金) 14:16:04.72ID:LozOvKy/
WASDK 1.2出てた
184デフォルトの名無しさん
垢版 |
2022/11/11(金) 18:21:02.46ID:WyiGvx4p
難解なWPFを制した君たちは新しいプラットフォームになっても
平気平気w
2022/11/11(金) 18:41:31.37ID:q6l5EPJl
WinAppSDK バグフィックスしてるのか?
クラッシュしないと直してくれない?
186デフォルトの名無しさん
垢版 |
2022/11/11(金) 19:41:02.20ID:LozOvKy/
GitHubのIssuesのところに書いたらいいんじゃない
2022/11/11(金) 19:41:21.37ID:c7AztzB6
>>176
こんなの山ほどありますよ
しかもオープンソースで
2022/11/11(金) 20:56:53.21ID:HyREv4PM
WinFormsを使い続けた俺大勝利
189デフォルトの名無しさん
垢版 |
2022/11/11(金) 21:12:50.96ID:WyiGvx4p
>>188
www 良かったな!。
やっぱりwpfに比べると簡単だもんな。
WINFORMS。
どっちも使ってるけどWINの方が楽だわ。
190デフォルトの名無しさん
垢版 |
2022/11/11(金) 21:15:09.63ID:WyiGvx4p
>>177
WPFにしても高DPI対応にするには
それなりに考えないといけないと聞いたが
ホント?
それともテキトーに作っても高DPIに対応されるんか?
2022/11/11(金) 21:36:21.79ID:hMordiys
ちょっとしたものならWinFormがお手軽でいいけど規模が大きくなるとxamlの方が差分がわかりやすいよね。
2022/11/11(金) 21:52:43.10ID:VNOGdawE
ListBoxにいろいろ突っ込みたいのでWinFormsに戻ることはない
2022/11/12(土) 00:31:14.01ID:y2c29nLT
DataTemplateはいいよねえ
2022/11/12(土) 11:16:14.48ID:ajB/boEg
>>177
このスレで言えば

- XAMLの編集がフォームエディタ必須のFormsより楽
- UIを含む自動テストがVMを叩くだけでほぼカバーできるので楽

あたりも定番だと思うが。
2022/11/12(土) 12:53:09.65ID:bRljaFHR
立ち位置としてはWPFはUWPに席を譲ったということになってるんだよ
ところがUWPがあまりに誰得なのでWinUIでWPFとUWPを統合しようとしてる
WPFはUWPとWinUIの不甲斐なさ故に生きてるだけでMSはできるだけ早くこいつを引退させたいわけ
理論的にはきちんとMVVMで疎結合にできてればWPFからWinUIへの移行は容易いからWPFにあまり力を入れる必要はないんだよ
winformsはそれらとはまたユースケースが違うし一世を風靡して現役の資産が山程ある
しかもRADが売りだからXAMLへの移行はコストが高い
それで見捨てるわけにはいかないんだね
2022/11/12(土) 13:39:57.76ID:vdP+ill1
>>194
前者はともかく自動テストについてはMVVM対応したらVMのテストはWPF同様にできるでしょ
197デフォルトの名無しさん
垢版 |
2022/11/12(土) 18:05:47.38ID:Uk17FKSM
>>195
UWPもおわってるけどな
2022/11/12(土) 22:50:48.74ID:7BfQmyov
>>177
WPF使う理由ってXAMLでレスポンシブな画面作れることでしょ。
MVVMはあってもなくてもどっちでもいいもの。
2022/11/12(土) 23:21:32.18ID:5MYZSKa9
>>198
WPFで普通に作られたUIはいわゆる世間一般のレスポンシブデザインには全く該当しないけど、
君のいうレスポンシブってどういうものを指してる?
2022/11/12(土) 23:22:28.30ID:HEowOLPg
おっと!

2022/11/13(日) 02:37:28.45ID:SxEQuHfC
ぶっちゃけ、テスト駆動開発なんてしてるの?
2022/11/13(日) 04:37:56.81ID:BsOFUxPA
絵に描いた餅だろ
2022/11/13(日) 09:39:55.13ID:2jgXqyDd
なんで唐突にテスト駆動開発なんて話が?
GUIに対してはなかなか難しいと思うが。
2022/11/13(日) 10:23:16.61ID:dnh5T98N
MVVMを採用するメリットはテスト駆動開発だから、それをしないのに採用する意味はあるのかな、と思って
2022/11/13(日) 10:26:27.45ID:2jgXqyDd
テストしやすいってのとテスト駆動開発はまた違う話だぞ?
2022/11/13(日) 11:18:11.03ID:TCbRukL6
react側から見るとしづらい方ですかね
2022/11/13(日) 17:56:04.29ID:7K/NPeS8
WinUIだが、TemplateStudioが作ってくれる雛形のWindowがサードパーティー製のWinUIExに置き換わった
これでWindowの位置と場所をキープしてくれるし、スプラッシュスクリーンもサポートしているようだ
スプラッシュの方はこれから見てみるわ
2022/11/13(日) 21:04:37.19ID:KxltdXvH
reactの場合はビューがDOMを生成する関数だから、ビューについても簡単にテスト書けるんだよね
WPFで複雑なバインディングをやるとビューの手動テストはそれなりに大変になる
WPFでビューの自動テストをやろうとするとUIオートメーション使うことになるから流石に大袈裟すぎて非現実的だよね
2022/11/13(日) 21:18:59.25ID:2jgXqyDd
>WPFでビューの自動テストをやろうとするとUIオートメーション使うことになるから流石に大袈裟すぎて非現実的だよね

オートメーションが必要なのはUIコンポーネントが内部状態を持ってしまっているFormsまでの話で、
MVVMの場合はプレゼンテーションロジックを全部VM側に持っているからそこのテストで
UIフレームワークを叩く必要がないというのが利点なわけだが。
2022/11/13(日) 21:24:43.10ID:KxltdXvH
>>209
Vからロジックを分離してロジックのみを単体テストできるのは当然Reactも同じ
その上でVの単体テストやインテグレーションテストをする場合の話をしてる
あと、Reactの場合は仮にVからロジックを分離しないことを選択したとしても自動テストは比較的容易だ
2022/11/13(日) 21:29:43.31ID:pp5TDwJ0
>>210
ほんとか?
state絡みRedux絡みは結構めんどいぞ
2022/11/13(日) 22:19:25.39ID:2jgXqyDd
>インテグレーションテストをする場合の話をしてる

Reactの場合でもそれはselenium使ったテストとかやらん?
2022/11/13(日) 22:31:21.25ID:2jgXqyDd
あと、
「WPFは非現実的」
「そんなことない」
「Reactすごい」←話が繋がってないw
2022/11/13(日) 23:07:14.52ID:1gqKHkfA
>>208
異常に面倒ですからねwpfのは
2022/11/13(日) 23:25:16.64ID:pp5TDwJ0
>>214
だからMVVMを使うのであってな
VMはVを抽象化したものだからVMのテストをすればVのテストはシステムテストまで要らんのよ
2022/11/13(日) 23:34:14.97ID:TdMl1FC3
なんでVとVMって分かれてるんだろう
ロジックなんてMに書くからVとVMが分かれてる必要性ないと思うんだけど
2022/11/13(日) 23:53:19.25ID:pp5TDwJ0
>>216
Vを抽象化したものがVMと書いただろ?
VMのプロパティに文字列を入れるのはVのテキストボックスに文字列を入れるのと同じことでVMのコマンドを実行することはVのボタンを押すことと同じなんだよ
VMにVの装飾以外の機能を移せばVはViewModelという名のModelになれる
Modelだから簡単なテストで性能を担保できるしコンパイルも早い
いちいちソース書き換えてデバッグ実行してテキストボックスに文字列書き込んでボタン押す作業を繰り返さなくても数行のテストコードで同じことが確かめられるから開発時間が大幅に短縮できる
短縮できないとしたらやり方が間違ってる
2022/11/14(月) 00:05:00.33ID:PgYCwlwQ
本来INotifyPropartyChangedはVMだけに設定して、VMはVから来た命令に従ってMに司令を出して
Mが完了したら自分のPropertyなどを更新してVに通知するからですね
でも、可也面倒だからMにInotfy・・・なプロパティーをMに設置するからVMはVにリレーするだけにしたりしているから
VMの役割が半分を端折ることが多いので無駄に見えてくるね
2022/11/14(月) 00:32:06.18ID:svXfhy4i
>>211
reduxなど使う必要性ないですね
単体テストの為に実装が増えることは基本無いのです
wpfのは余りに無駄すぎます
2022/11/14(月) 00:38:25.53ID:0RxMnhmu
>>217
そのテストコードを書くより画面で入力した方が楽じゃない?
テストコードがちゃんと書けてるかもテストしないといけないし。
どれくらいの回数のテストするかによるかもしれないけど、そういう特殊なケース以外でのメリットがわからない。
2022/11/14(月) 00:42:59.00ID:IdOGQmNP
あと、Vのコントロールで参照したいプロパティの数だけVMにもプロパティを作ってはバインドするのが辛い
VMでコントロールを参照できれば簡単だけど、それだと理念に反する感じもするし…
2022/11/14(月) 02:19:45.52ID:HDY6oj/W
まあアホに何言っても無駄だから自分の信じるやり方でゴミを作ればいんじゃね
2022/11/14(月) 05:40:27.75ID:YYO5Hrl+
↑自分がそのアホだと気付いていないアホ
2022/11/14(月) 06:15:26.54ID:osaHTAYz
テストが一回きりなら手動の方が早いだろうな
2022/11/14(月) 07:20:40.36ID:zeNxJ9gL
この手のやつは半信半疑ながらも自分で手を動かして実践しないと理解できなかったりする
2022/11/14(月) 07:34:36.07ID:ok27TY1c
WPFやWinUI3の標準テンプレートってどれよ? PrismやCommunityKitなどいろいろあってわかんなーい。
CommunityKitでDependencyInjecttionとHostingをNuGet導入するあたりが標準なのかしら?
227.NET MAUI HighSchool
垢版 |
2022/11/14(月) 07:45:50.17ID:p8dKwuQs
最近はCommunityToolKit何じゃないかぁ???
2022/11/14(月) 07:57:38.88ID:TzpWDTj0
VSにTemplate Studioという拡張を導入してプロジェクトの雛形を作る
https://marketplace.visualstudio.com/items?itemName=TemplateStudio.TemplateStudioForWinUICs

基本はCommunityToolkitだが、不足しているものをコード自動生成してくれるし最小限のNugetも導入してくれる
229デフォルトの名無しさん
垢版 |
2022/11/14(月) 11:51:13.81ID:EWF0SvAn
>>216
MVCという言葉を使いたくなかっただけ
2022/11/14(月) 13:31:55.51ID:u/Tvru9y
>>224
全部作り終わってから一回だけテストすることが許されてる環境とか嫌すぎる
2022/11/14(月) 13:34:53.19ID:u/Tvru9y
>>221
動作に必要なプロパティがそんなたくさんあるとかおかしいんじゃね
232デフォルトの名無しさん
垢版 |
2022/11/14(月) 13:34:59.86ID:mrCA5Qrf
あるボタンが押されたら他のあるボタンが押せなくなるみたいな簡単なロジックのやつは、xamlでコントロール同士をバインディングしているのですが、これはそうせずにCSでプロパティ変更のコードを書いた方がいいのでしょうか
2022/11/14(月) 13:43:21.84ID:hyabTMwB
>>232
あるボタンにVMのコマンドをバインドする
VMはそのコマンドが実行されると自身のIsOtherButtonEnabledプロパティ(このプロパティは自分で作る)をtrueにする
他のボタンのIsEnabledプロパティを全てこのIsOtherButtonEnabledプロパティにバインドする
これであるボタンが押されると他のボタンが押せなくなる
2022/11/14(月) 13:44:15.94ID:hyabTMwB
>>233
✕true
○false
2022/11/14(月) 22:04:24.32ID:aaTBlyIu
>>216
>ロジックなんてMに書くから

こういう勘違い昔から多いよな。
236.NET MAUI HighSchool
垢版 |
2022/11/14(月) 22:06:34.12ID:p8dKwuQs
ロジックはVMに書く
たしかに最初は間違って覚えちゃうよな
俺もそうだった
モデルは情報を持つだけ
2022/11/14(月) 22:10:06.97ID:b4FWDRLa
勘違いではないでしょ
もしかしてVMで直接リポジトリを触ったりしちゃってる?
238.NET MAUI HighSchool
垢版 |
2022/11/14(月) 22:11:49.45ID:p8dKwuQs
そういえば今日
BindingContext=this;でそのページ上、画面上にあるプロパティ全てBindingできるコンテンツとして扱えるということを勉強したこれよいね
239.NET MAUI HighSchool
垢版 |
2022/11/14(月) 22:14:11.99ID:p8dKwuQs
>>237
してるね
.xaml.cs←VMファイルに分けなければ実質的なVMにパス書いてるわ
ただオブジェクトのモデル(プロパティ郡)はちゃんとモデルでわけてる
2022/11/14(月) 22:40:55.53ID:b4FWDRLa
MV*系のアーキテクチャでいうMはビューの上位に存在するもの全般を指しているのだけど、
モデルという言葉のせいでデータモデルとかドメインモデルなんかと混同しやすいんだよね
本来的にはそれらを弄くり回すのは「サービス」層の仕事で、VMの仕事はサービスに処理を投げて結果を反映するだけだ
241.NET MAUI HighSchool
垢版 |
2022/11/14(月) 23:07:12.03ID:p8dKwuQs
>>240
なるほどMVVMSみたいな感じなわけですな
たしかにサービスクラスよく作りますわ
MVCだとMVCSみたいな
2022/11/14(月) 23:15:51.49ID:aaTBlyIu
>>236
ロジックはMVCどこにでも書くだろう。ビジネスロジックだけがロジックってわけじゃない。
2022/11/14(月) 23:16:37.69ID:aaTBlyIu
まちがえた。>>242>>237な。
2022/11/15(火) 07:30:18.11ID:TYbL5LNK
MVVMでDDD するとしたらどこにアプリケーション層やらドメイン層を置くの
2022/11/15(火) 08:17:54.90ID:oaKUlL5c
どっちっもMじゃね?
246デフォルトの名無しさん
垢版 |
2022/11/15(火) 14:19:21.05ID:Lk8Tc52e
>>233
ありがとうございます。そのように変更してみます
247デフォルトの名無しさん
垢版 |
2022/11/15(火) 18:50:53.84ID:9/ARJaEi
WinUI 3 Galleryが更新されてた
248デフォルトの名無しさん
垢版 |
2022/11/15(火) 18:55:38.96ID:fFtAGper
メディアプレイヤーエレメント来てるねぇ
そういえばMAUIでも使えるようになるんだ(まだプレビュー)
249デフォルトの名無しさん
垢版 |
2022/11/15(火) 18:59:44.05ID:fFtAGper
全体的にUpdateされたみたいね
250デフォルトの名無しさん
垢版 |
2022/11/15(火) 19:04:44.40ID:fFtAGper
Windows10だからシステムバックドロップスのMicaやAcrylicがわからん…
251デフォルトの名無しさん
垢版 |
2022/11/15(火) 22:06:07.59ID:o0cMt8HV
MVVM使うような巨大アプリは扱わんだろうなぁ。
2022/11/15(火) 22:50:08.95ID:iGLqmck8
メディアプレーヤーちょっと触ってみたけど
ビデオ画面のフルスクリーンが出来ないのが残念だったわ
プロパティーあるからそのうち実装されるんだろうが
253デフォルトの名無しさん
垢版 |
2022/11/15(火) 23:30:39.77ID:fFtAGper
そういえばこれと同じようなソフトでCommunityToolkitSampleAppもあるけどみんな使ってる?
色々コントロールあってWinUIでも色々できるんだなぁってなった
254デフォルトの名無しさん
垢版 |
2022/11/15(火) 23:33:13.02ID:fFtAGper
これ
https://www.microsoft.com/store/productId/9NBLGGH4TLCQ
255デフォルトの名無しさん
垢版 |
2022/11/16(水) 02:12:36.05ID:F1FwASBt
そういえばこういうToolkit Sample AppみたいにXAML変えたら勝手にViewも変わるようにするにはどうすればいいんだろうか?
.NET MAUIとかで同じようなアプリ作りたい
2022/11/16(水) 16:06:10.44ID:31Oci6nz
VSのWindowsAppSDKでページやユーザーコントロールの新規ファイルを作るとSJISコードで作っちまうようだ
Xamlで文字化けが起こった時はサクラエディタなどでUTF8 BOM付きに変換すれば治る
2022/11/17(木) 06:38:43.37ID:edZsLEUo
>>254
UIがうざいな。
何するにもワンテンポ待たされる。
アニメーションにセンスがない。
操作を分かりやすくするため、操作の邪魔をしないよう最小限にという鉄則が守られていない。
2022/11/17(木) 17:13:44.56ID:IkDUYkmL
WinUI Template使ったら凄いでちゅね。 Blankでもあれよあれよとフォルダーだらけ。
MSTestまで追加されている。
とりあえず構成として足りないNuGetはMicrosoft.Extensions.DependencyInjectionぐらい。
App1.Coreライブラリブロジェクトは不要なので削除して、App1.DomainライブラリプロジェクトとApp1.Infrastructureライブラリプロジェクトは追加したが、
こんなのに初心者が付いてこれるのかね?
2022/11/17(木) 17:20:59.19ID:bRe6n69U
最悪MSやパートナーに相談してくれりゃいいというスタンスなんでしょ
WinUIなんて、どうせ使うのはMSのエンタープライズサポートが付いてる高級客くらいなんだから
2022/11/17(木) 17:48:44.99ID:IkDUYkmL
>>259
まぁ もう販促の時代では無いとしているんだろうが、
バリデーションやエレメントEnabledコンディションのUIロジックと単位やファインナンスルール等をドメインに入れるアーキテクチァーロジックとの区別ができない奴がVMにもロジックがあると言っているこのスレ見れば、
もう少し、DellphiなどのRAD時代のようなTemplateを用意しても良いとはオモ。
全体のTemplateをみる限り、八方ふさがりが多い。
261.NET MAUI HighSchool
垢版 |
2022/11/17(木) 19:14:41.39ID:iKwqu8K0
>>258
テンプレートスタジオのじゃなくて既成のやつ?
2022/11/19(土) 02:17:21.47ID:CL48cSEB
既存のWPFのプロジェクトでWinUIのコントロールを使うことってできませんか?
2022/11/19(土) 07:41:53.45ID:0mattRbK
xaml islands?
.net core3じゃないと使えないと聞いたけど
264.NET MAUI HighSchool
垢版 |
2022/11/19(土) 08:09:34.03ID:BTXZ3B+x
たしかにWPFでWinUI3のコントロール使えたら最強だわなw
普段と何も変わらず見た目だけおしゃれにできる
265デフォルトの名無しさん
垢版 |
2022/11/20(日) 14:23:46.53ID:4TEpIoUs
datagrid内のtextblockのmaxlengthを設定する方法はありますでしょうか。現在は入力されたらcelleditイベントで飛ばしてパンドラ側でtextをバインドしたコレクションの文字数を調べて上限を超えていたら、上限超過文字をカットしてコレクションに入れ直しています。そもそもtextblockで上限文字以上を受け付けない方法に変えたいです。

datadrd内のtextboxをダブルクリックで編集メードにする方法はありますでしょうか。こちらであればmaxlengthを設定できるので、上記のような問題は出ないのですが、ワンクリックで選択したらいきなり編集モードになってしまい、それは避けたいというところです。

どうぞよろしくお願いいたします。
266デフォルトの名無しさん
垢版 |
2022/11/20(日) 17:52:21.57ID:b1CRB9CX
ここに質問しても禄に回答なんてないよ。そんなレベルだから。ま、自分もそうだがw
ヤフー知恵袋などの方が良い。
2022/11/20(日) 21:54:33.51ID:sZw8WIOe
>>265
DataGridTemplateColumn じゃあかんのか?
2022/11/20(日) 22:05:41.15ID:oLom3qzC
これじゃね?
https://stackoverflow.com/questions/1736753/datagridtextcolumn-maxlength
269デフォルトの名無しさん
垢版 |
2022/11/21(月) 04:36:19.56ID:6Crx1mAE
ありがとうございます。スタックフローにある通り、以下の構成でダブルクリック編集ができました。
<DataGridTextColumn
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox" x:Name="name"

しかし、x:Nameによる操作がcsコード側でコントロールできないのですが、何か方法はありますでしょうか。
(name.MaxLength=50とかがnameが認識できないエラーになる)

質問ばかりですみません。よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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