X



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

■ このスレッドは過去ログ倉庫に格納されています
2022/04/11(月) 05:10:34.19ID:LqBiqZMV
WPF(Windows Presentation Foundation)について語るスレ。

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

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

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
2022/10/15(土) 18:38:28.19ID:s858Kg5J
>>783
簡単にUIの入れ替えね。 
ピクセル単位の画面デザイントリミングもXAMLホットリロードのメリットだけど、それ以上に入れ替えが簡単。
785デフォルトの名無しさん
垢版 |
2022/10/15(土) 19:23:17.01ID:XQPIem9+
>>780
いやいや、スゴイね。
微調整はともかく、やっぱりポトペタしか
できんわ。
2022/10/16(日) 06:43:26.17ID:mJXNQh6A
>>782
UI的にWinFormsで十分でもWPFで作ったらもっと楽できる。
MVVMは使う必要ないよ。
プログラム初心者ほど「WPFはMVVMで作らなきゃいけないんです!」みたいなこと言うけどね。
MVVMで組んで楽な場合とそうでない場合の見極めがまだできませんって白状しているようなもの。
787デフォルトの名無しさん
垢版 |
2022/10/16(日) 08:30:12.62ID:OVnfavOi
>>782
同じ理由でWPFでも十分なんだよな
もう「最新」でもないし

慣れた方で作ればいい
どっちにも慣れているなら、自由度が高いWPFを選んどくべき
788デフォルトの名無しさん
垢版 |
2022/10/16(日) 08:50:09.89ID:+WFeYHV0
遅いけどね。
789デフォルトの名無しさん
垢版 |
2022/10/16(日) 09:22:04.05ID:Lttjv/2U
こういう感じのチャート画面(上段)を作りたいときって
WPFだとどう構築するのがいいんですかね
https://www.fujitsu.com/jp/imagesgig5/fig_01_tcm102-5857076_tcm102-2750236-32.png

Winformsだと脳死でOwnerDraw使ってて、
かなり昔にWPFでVisualTreeでチャートのタスクを作ってみたら要素が多くなってきたときに
パフォーマンスがでなくてあきらめたことがある感じです。
適当に見つけてきたサンプルなんですが、これも図形を500個くらい出すと
(CPU9900Kで)ガクガクになってしまい
https://github.com/noitaro/wpf-excel-shape-line
2022/10/16(日) 09:43:21.72ID:H5a3DLoU
>>789
一部分しか表示しないなら仮想化してみる
大量のオブジェクトを同時に表示する必要がある場合は諦めてSkiaSharp等で独自に描画
791デフォルトの名無しさん
垢版 |
2022/10/16(日) 09:53:01.90ID:Lttjv/2U
>>790
なるほど。表示時間範囲を変えて多量に表示するケースがあるので独自描画ですかね。
こういう画面だとWPFになってもあんまりWinformsと変わらないんですね。
今もWinformsでSkiaSharpは使ったりしてるので。
2022/10/16(日) 09:59:25.00ID:5h4cgJ0F
DrawingVisual
793デフォルトの名無しさん
垢版 |
2022/10/16(日) 10:25:32.31ID:+WFeYHV0
>>789
リアルタイムで横スクロールさせる必要あり?
794デフォルトの名無しさん
垢版 |
2022/10/16(日) 11:26:13.18ID:Lttjv/2U
>>793
スクロールのリアルタイムが何を指すのかよく分かってないですが
画面に見えてる期間と、スクロール範囲の期間が指定できる感じです。

今はビットマップにお絵描きしてるんですが、期間が長いとメモリ量や描画速度の問題がでるので
見えてる範囲+1画面分先まで描画しておいて、スクロールはなめらかに表示できるようにして、
裏で次の1画面先の描画をしてます。
2022/10/16(日) 13:56:19.16ID:smb+KIWw
WinUIだとWin2Dが使えるね
796デフォルトの名無しさん
垢版 |
2022/10/16(日) 20:32:36.57ID:+WFeYHV0
>>789
単なる表示だけで良いなら、GDIなんかでJPGファイル生成して
それをwebviewコントロールで表示。スクロールもスムーズ。

リストビュー(詳細)にプログレスバー入れるのが面倒(難しい)ので
■を並べて疑似プログレスバーにしたり、そういうインチキは必要ですよ!。
2022/10/16(日) 20:40:32.26ID:g7emZOKP
WebView使うんならHTML canvasでいいだろ
クッソ速いぞ
798796
垢版 |
2022/10/17(月) 19:50:46.02ID:SW8Ac5Im
試しにWebBrowser コントロール でやってみた。
結構快適でした!
2022/10/17(月) 22:16:37.20ID:0qh/TO9I
Reactでやれば?
WPFより楽だよ
800デフォルトの名無しさん
垢版 |
2022/10/17(月) 23:28:17.22ID:McxJ9oCE
安いグラボでも取り付ければ解決しそう
801デフォルトの名無しさん
垢版 |
2022/10/19(水) 06:13:02.67ID:gHfHnf27
XAMLのgrid大変。XAML作ってくれるサイトないかな。
誰か作ってくれ!。
2022/10/19(水) 06:14:40.62ID:QJIH0uaq
それまたGreedyやな
803デフォルトの名無しさん
垢版 |
2022/10/19(水) 07:29:47.70ID:gHfHnf27
EXCELの罫線->HTML(TABLE)にしてくれるサイトはあるんだが。
804デフォルトの名無しさん
垢版 |
2022/10/19(水) 07:30:56.01ID:gHfHnf27
画面とプログラム分業できる! というけど結局はプログラムつくるやつが画面も
やる羽目になるんだよな。
805デフォルトの名無しさん
垢版 |
2022/10/19(水) 13:16:56.43ID:CSq9FDVE
そもそもそんな分業したくなるもんなの?
欲しいのは素材用意する人とかでしょ
2022/10/19(水) 14:09:50.67ID:8/1xE7ux
分業というか画面デザインとコードが別のファイルになるのが大きいのよ
もちろん一人でもできるけど二人以上が並行作業することによって納期が短くなる場合がある
2022/10/19(水) 15:25:04.63ID:xv0v1s7I
まぁ 確かにコーダーにはデザインセンスは無いわな。
デザイナーがやっているのを見るとさすがと思う事しばしば。
アイコン作りひとつとっても、ああいう統一感のあるプロの仕事は俺にはできない。
2022/10/19(水) 16:40:22.99ID:6Jytj3Zv
外観や視覚要素のことだけを指して「デザイン」と呼ぶ人が随分と増えてしまったな
2022/10/19(水) 16:42:36.62ID:hmhTQwmw
昔からなのに何を今更
810デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:32:47.73ID:gHfHnf27
>>807
わかる。あれはセンスも必要だな。
811デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:38:31.73ID:gHfHnf27
暇だったんでXAMLやってみた。gridが基本らしいのでテキトーにサイトから
コピペで張り付けて実験。一応何とかできるようになった。
開発の方に戻るかも知れないのでアンチWPFだったけど再挑戦してみようかなと、
思って。意外とWFPの仕事があるらしいな。
最初はデータバインディングで諦めたがwinforms風の作り方もできるらしいし。
(WPFはデータバインディングが必須だと勘違いしてた)

で、みんなはバリバリ、データバインディングしてんの? 凄いわ〜。
2022/10/19(水) 19:48:19.28ID:hmhTQwmw
逆にWPFのデータバインディングがわからないって知能を疑うレベルなんだが
何がわからないのかがさっぱりわからん
INotifyPropertyChangedを実装したオブジェクトをペタッと貼り付けるだけだろ

コマンドとデータバインディング縛りが面倒でどうしてそんなことしなきゃいけないのかわからんと言うならまだ理解できる
813デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:51:24.12ID:CSq9FDVE
思い込みだけでアンチに走ってるやつたくさんいるよな
2022/10/19(水) 19:52:34.04ID:PkgPUfpm
面倒なだけだもんな
815デフォルトの名無しさん
垢版 |
2022/10/19(水) 19:54:17.30ID:gHfHnf27
>>812
プリズムというのを使わないとやってられん、
と聞いたけどどうなん?
2022/10/19(水) 19:59:29.50ID:hmhTQwmw
>>815
それは誰かの気のせい
Prismは無駄に複雑だからそれがわからないのはわからんでもない
CommunityToolkit使えばいい
817デフォルトの名無しさん
垢版 |
2022/10/19(水) 20:30:50.69ID:gHfHnf27
>>816
そうなんだ。
自力で習得したの?
周りに聞くとしたらここ位しかないわ〜。
2022/10/19(水) 21:11:06.79ID:fx6wlbL4
最初はなんかだめんどうだなこれとか思ってたけど
いつのまにやらバインドないとダメな体へ
2022/10/19(水) 22:52:15.49ID:MjHpqF4H
>>815
Prismはオワコン
2022/10/20(木) 08:31:41.48ID:Jn5DzN+i
Prism 懐かしい言葉。
PrismLibralyのぞいてみたら、更新止まっているようだね。
まぁ 他のエクステンションが充実して、もう不要だけれど、リージョンにはちょっと魅力あるな。
2022/10/20(木) 08:56:39.10ID:fA9BY5Dh
ReactivePropertyが流行ったのもPrismが重厚すぎるせいだったんだろうな
今全然使うことないや
そもそもView層にロジック置いてリアクティブスパゲッティとか茹でたらテストめっちゃめんどいし結局INotifyPropertyCanged作らなきゃメモリリークするし
2022/10/20(木) 09:06:41.37ID:Jn5DzN+i
>>821
まぁ 今や、View,Domain,Infrastructure分離の時代。
ViewやViewModelにロジック入れるとは思えないけどw
メモリリークは対策したんじゃなかったっけ? かずきが言っていたような・・・
2022/10/20(木) 09:14:02.00ID:fA9BY5Dh
>>822
> まぁ 今や、View,Domain,Infrastructure分離の時代。
いつの話をしてるんだw
それはMVVMとはまた別の話
というかもう少し原始的な話
2022/10/20(木) 09:17:17.47ID:Jn5DzN+i
>>823
分離していないのか?
2022/10/20(木) 09:17:56.01ID:Sw/y3Njc
DDDだろ?
話のレイヤーが違う
2022/10/20(木) 09:53:01.29ID:vhdcBzgB
>>822
ReactivePropertyはそれを入れるんだよ
まあ少々なら入ってもいいんだが調子に乗ってスパゲッティ茹でるやつ多すぎ問題が発生してな
2022/10/20(木) 11:46:42.17ID:1rcGbOTK
PrismでもBidableBaseを使う程度だとコレ以上ないシンプルな実装なので
遅くなるなんてあり得ないんだけどね
嘘だと言うならソースを見ればいい
評判悪かったのはDIの実装だが、DryIocを取り込んた後は悪くなかったんだがね
2022/10/20(木) 11:50:25.85ID:1rcGbOTK
BindableBaseのソース
https://github.com/PrismLibrary/Prism/blob/master/src/Prism.Core/Mvvm/BindableBase.cs
2022/10/20(木) 11:56:34.23ID:k5cX4DSs
DIって何だっけ?
シングルトンでええやんって奴か
2022/10/20(木) 12:32:08.36ID:EjoMYd4Y
BindableBaseだけならオレオレ実装で十分だから
2022/10/20(木) 20:22:28.34ID:4NfigoYb
>>826
いろいろ繋げると玄人になった気分が味わえるからな
ピタゴラスイッチみたいなもんよ
2022/10/21(金) 08:38:15.01ID:7kH42VO8
>ViewやViewModelにロジック入れるとは思えないけどw

ビジネスロジックじゃなくてプレゼンテーションロジックは普通に入れるだろ。
833デフォルトの名無しさん
垢版 |
2022/10/21(金) 18:37:34.29ID:/3dSptxz
>>819
危うく手出すところだった。
834デフォルトの名無しさん
垢版 |
2022/10/21(金) 19:51:23.73ID:/3dSptxz
質問なんだが、コントロールとのデータのやり取りは全てデータバィンディングに
するの?
テキストボックスくらいならまだしもコモンコントロールでいうListViewも
データバィンディング? 大変そうなんだが。
2022/10/21(金) 20:12:20.19ID:fkhZIfDj
アイテムテンプレートという各アイテムのビジュアル表現をxamlで一度定義すれば後は勝手にアイテムの数だけコントロール作ってくれる
ViewModelはアイテムを表すオブジェクトのListを保持してりゃいいだけ
836デフォルトの名無しさん
垢版 |
2022/10/21(金) 20:16:17.14ID:fkhZIfDj
ListViewの話ね

最初の質問に関してはデータバインディング使いたくなきゃ使わなくてもいいが
その場合、自分でコントロールの中身を手動で更新
これがめんどくなければ使わなくてもいいんじゃないか
2022/10/21(金) 20:44:00.37ID:dr0clczO
そのうちバインディングでないと面倒くさくなるよ
2022/10/21(金) 20:59:53.80ID:PtHJlLEa
素でバインディングじゃ無理な場合はビヘイビアというのでイベントをVMに通知したりする
それでも無理ならサービスクラスをViewからVMにインジェクションするんだが
コレは結構インチキ臭い(MVVMとして)

でもScrollIntoViewなんかを実行するならサービスクラスでやるしか無いんだよな
2022/10/21(金) 21:01:42.97ID:5OVp+/fG
>>838
普通にコードビハインドでいいしビヘイビアでもできるだろ
2022/10/21(金) 21:06:09.93ID:l9aLYoss
>>834
バインディングした方が楽な時だけすればいい。
コントロールに名前つけてプロパティに値設定してやるオーソドックスなやり方の方が
結局メンテもしやすくコードもすっきりする事も多い。
841デフォルトの名無しさん
垢版 |
2022/10/21(金) 21:13:29.65ID:/3dSptxz
いろいろ助かる。

素人すぎてどういうときにバインディングすればいいかわからんな。
ま、いろいろ試すしかないな。

>>自分でコントロールの中身を手動で更新
今までそうしてたから苦ではないけどな。
2022/10/21(金) 21:18:16.45ID:PtHJlLEa
>>839
ScrollIntoViewのビヘイビアは作ってみたが、一度表示したアイテムがユーザーのスクロールで範囲外になった時
それを再び表示するとなると、一度nullを入れてからアイテムをセットしないと動かない
美しくないからボツにしてサービスクラスにしました
2022/10/21(金) 21:59:58.51ID:SIBduJ8N
ユーザーコントロール作るの大変なのどうにかしてほしいわ
添付プロパティとかなんであんな実装大変なんや
2022/10/21(金) 22:46:07.26ID:5OVp+/fG
>>843
俺もそこは気に入らんけどコードスニペットや拡張メソッド使えばそこまで大変ではないし添付プロパティなんか滅多に実装することないだろ
2022/10/22(土) 12:06:28.89ID:hKX+QcZc
とにかく面倒くさいという事がよくわかる

いやーー早期にReactに移っといて良かったわーー
2022/10/22(土) 12:08:49.73ID:LN75Th25
MAUI HighSchoolは芸風変えたのか
847デフォルトの名無しさん
垢版 |
2022/10/23(日) 11:28:55.52ID:a+gf5qbq
データバィンディングについて良いHPあったら紹介を求む!
2022/10/23(日) 12:50:54.71ID:PeJMt3DI
おかずきさんのブログ見ればいいじゃん
849デフォルトの名無しさん
垢版 |
2022/10/23(日) 15:15:46.33ID:a+gf5qbq
>>848
そのブログではプリズム使うみたいですね。
止めときます。。
2022/10/23(日) 22:19:07.90ID:QAzLw4mz
バインドするだけなら、nugetにあるReactiveProperty使ったらどう?
あれが1番簡単そうに見えたけど
2022/10/23(日) 23:16:12.48ID:UYu25ZB7
データバインディングの勉強目的なら最初は何も使わずにINotifyChangedPropertyぐらい自前実装でいいだろ
10行未満なんだし
852デフォルトの名無しさん
垢版 |
2022/10/24(月) 05:52:10.08ID:KSxIdWu8
バィンディングっていろいろ手法があるみたいでその辺も混乱の元ですね!
2022/10/24(月) 08:24:55.30ID:faJr3BKh
INotifyChangedPropertyの実装に関しては、prismもmicrosoft.toolkitもほぼ同じもの
Xaml側は全く同じだからどのHPを見ても何も問題ないんだけどね
prismで勉強して、些末な違いをMSのドキュメントで補完すればいいんじゃないかな
2022/10/24(月) 09:19:40.79ID:1MyEkAqJ
React界隈じゃ
不用なのものを徹底的に排除して突き詰めてるのに、

XAML界隈は
ライブラリー!ライブラリー!ライブラリー!
ドヤ顔ライブラリー房のこの違い...
2022/10/24(月) 10:44:59.17ID:chiatfyX
Reactに対応するのはXAMLじゃなくBlazorなので
856デフォルトの名無しさん
垢版 |
2022/10/24(月) 14:16:41.10ID:qez9jhSx
x:Bindのない環境には戻れなくなったな
2022/10/24(月) 14:22:42.94ID:4Vi8uVIi
>>856
残念ながらUWPとUnoでしか使えないx:Bindはオワコンだ
2022/10/24(月) 16:39:17.71ID:TU0Y+jHJ
x:bind最新のWinUI 3で使えないんだっけ?
2022/10/24(月) 18:22:08.47ID:tdhvInBd
>>854
これ何の話してんの?
2022/10/24(月) 18:23:57.86ID:D4BkPogX
やってみた。
x:BindはWinUI3もMAUIも使えるよ。
安心しな。
2022/10/24(月) 18:38:10.90ID:ahW9XqJY
いやWinUIでも使えるわx:Bind
2022/10/24(月) 18:46:31.31ID:DN4O5MAE
UWP作ってないしx:bind使ったこと無かったわ
その使い心地を見せて貰おうかっ
863デフォルトの名無しさん
垢版 |
2022/10/24(月) 20:07:56.89ID:KSxIdWu8
>>850
今日入れてみた。試してみる。
いろいろフレームワーク大すぎ。
MSが良いもの出さないからか。
こっちでの開発ではプリズム、
異動先ではReactiveProperty使用とか。
難儀やなぁ。
2022/10/24(月) 20:38:47.05ID:TU0Y+jHJ
x:bindはUWPでコンパイル時バインドで速いという触れ込みがあったから使ったみたが速度差体感できずコンパイル時の型チェックもうざいので俺はbindindに戻ったけど
2022/10/25(火) 00:26:50.52ID:YzZqh/Jo
コマンドに使用可否だけじゃなくて、表示非表示も持ってほしいよな
2022/10/25(火) 17:32:19.08ID:ZIbwJZxR
それは同意
2022/10/25(火) 17:39:08.19ID:qnnhkHib
VisibleとEnabledを自己バインドすればいいだけじゃね
2022/10/25(火) 18:12:35.24ID:ZpBlkdg7
x:Bindはイベントがバインド出来てFormsのやり方MVVMででコーディングできるんだっけど
そこらへんをアピールするつもりはないようだね
ビヘイビアが難しいわけじゃないけど冗長だから使わずに済むのも大きいね
2022/10/25(火) 18:52:32.57ID:ZIbwJZxR
>>867
それじゃ足りないケースがあると思う
2022/10/25(火) 18:58:07.50ID:tQ39k2n1
どういうケースを想定してるのかわからんわ
disabledの時に消せばいいんじゃないのか?
2022/10/25(火) 19:22:02.07ID:ZIbwJZxR
そもそも表示しない
表示するが無効
表示するが有効
この3通りをやりたい時がある
2022/10/25(火) 19:28:01.21ID:E0pz5hZT
get -> そもそも ? hidden : 表示する ? visible : hiddem;
2022/10/25(火) 19:30:03.09ID:tQ39k2n1
そんなことしたいと思ったことないからわからんけどコマンドとのバインディングでしなきゃいけないなら継承するしかないな
俺ならViewModelのプロパティを使うが
2022/10/25(火) 19:33:01.57ID:ZIbwJZxR
例えば、ログイン機能があるアプリとかでログインしてなきゃ更新ボタンをそもそも表示しない
で、ログインして更新ボタンを押して更新中になったら一時的に無効に切り替えてとか
たまに、表示/非表示と有効/無効を別に扱いたいときがある
2022/10/25(火) 19:38:27.55ID:FKrq6Yl8
単純にコードビハインドでやれば良くね? 頭悪いの?
2022/10/25(火) 19:39:39.54ID:qnnhkHib
それログインボタン以外の管理用機能が必要になった時どうすんの
管理者フラグをVMに用意して管理者用コントロールパネルごと消すべきだろ
個々のコマンドじゃなく
2022/10/25(火) 19:46:40.08ID:ZIbwJZxR
例えが悪いなら謝るが
別にボタンの他に、メニューにバインドされる可能性だってあるし
俺が昔必要に思った時のケースは思い出せねぇわ
878デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:07:37.74ID:IkY374Tt
MVVM? 初心者だがやはり有用性が理解できんw
2022/10/25(火) 20:12:35.43ID:qnnhkHib
そりゃ初心者は理解できんかもな
大きく複雑なプログラムを作る時に威力を発揮するものだから
880デフォルトの名無しさん
垢版 |
2022/10/25(火) 20:16:47.78ID:IkY374Tt
>>879
らしいね。
みんなもそうな大きく複雑なもの作ってるんだ?
2022/10/25(火) 21:19:57.69ID:YzZqh/Jo
そもそも世の中に転がってるシステムに疎結合なんて不要な気がするわ
設計に時間かけれる人は自己満足でやってもいいかもしれないけど
2022/10/25(火) 21:36:23.84ID:Z3XSYrgl
保守せずに作り逃げするならいいかもね
2022/10/25(火) 21:43:21.12ID:M72P4hA2
WPFの主用途はゴリゴリの業務アプリだから、複雑なのはUIではなく業務フローなんだよね
ただ画面数が多いだけだ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。