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

■ このスレッドは過去ログ倉庫に格納されています
2021/09/19(日) 18:43:39.82ID:9XIs1/Nq
WPF(Windows Presentation Framework)について語るスレ。

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

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

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
2021/09/27(月) 16:21:02.35ID:NYWmPD2Y
>>18
いや、DrawRectangle同士でも

DrawRectangle(Brushes.Black, null, new Rect(0, 0, 1, 100));
DrawRectangle(null, new Pen(Brushes.Red, 1), new Rect(0, 0, 0, 100));

こうするとそもそもxの起点位置が違うんよ
下の赤線の方が1つ左にズレて-1位置に描かれる
2021/09/27(月) 17:35:29.70ID:kU8huA04
今のwinui、バインド関連のバグ多くない?
せっかくなら新しいの覚えながらやりたいと思ってwinuiで作ってたけど、使用に耐えるものを作れそうにない
UI部分wpfに差し替えようかな

素人がプレビュー版なんて使うんじゃなかったわ 自分じゃどうにも改善できねえ
2021/09/27(月) 18:37:11.61ID:xaSuQemP
>>20
そうなんだごめんよ
>>21
でも、WPFにすると見た目がダサくならんか??
WPFにすると見た目がダサくなるが安定
WinUI3にすると見た目がおしゃれだが、ちょっと不安定
23デフォルトの名無しさん
垢版 |
2021/09/27(月) 18:39:27.60ID:xaSuQemP
まぁ、WinUIとか定期的に更新してくれるからバグ報告すりゃそのうち直る可能性高いけど、ユーザー少ないからバグを自分で踏んで報告する羽目になる..
2021/09/27(月) 19:12:05.92ID:Aa8uOS44
>>22
modernWpfUI使えば大体似た見た目にはできるから、もういいかなって
2021/09/27(月) 19:25:35.38ID:Aa8uOS44
21です(23も俺)

過去にWinFormで作ったソフトをWinUIで再構築しようとしてたんだけど、新しいことやってみたい気持ちだけでWinUI使ってた
正直今背伸びしてまで使うメリットが自分には見えないんだよなー

WinForm→WinUIも
WinForm→WPFも
ユーザー目線だとそんな変わんないんじゃねって思う(WPFはUIのライブラリ使って現代風の見た目にすれば)
2021/09/27(月) 19:26:44.43ID:Aa8uOS44
ごめん21,24,25が俺ね
どうでもいいことで連投すまん
2021/09/27(月) 20:38:54.92ID:xaSuQemP
>>24
俺もmodernwpf 使ってたけど、win11スタイルはまだだし
NavigationViewとか階層メニューまだっぽいし
やっぱ、個人じゃきついよなーとか
28デフォルトの名無しさん
垢版 |
2021/09/27(月) 20:42:51.67ID:xaSuQemP
WPF+ModernWPF

WinUI
で似たアプリ2つ同時に作りながらやってるわ
最終的にWinUI一本に絞ると思うけど
29デフォルトの名無しさん
垢版 |
2021/09/27(月) 20:54:34.65ID:xaSuQemP
> ユーザー目線だとそんな変わんないんじゃねって思う(WPFはUIのライブラリ使って現代風の見た目にすれば)

たぶん、そうだと思うけど(とりあえず、ライトとダークあれば)

俺はそこだけは変にこだわってるから

ちょうど数時間前もWPF+ModernWPFで、CommandBarじゃなくてWPFのToolbar使いたくてでもModernWPFでToolbarはスタイリングされないから頭抱えてた

まぁ、自分でスタイリングする能力ないんで..
2021/09/27(月) 22:47:47.96ID:LVIsrHah
>>26
1.0 Preview1も駄目?
2021/09/28(火) 06:42:23.50ID:7CUpdHu/
>>30
あー、もうそんなの出てたんだね
そういえばgithubのバグ報告のページで「1.0.0でも起こるけどまだ直ってないんか?」みたいなコメントしてた人いたわ 見たときはなんのことだと思ったけど

だめっぽいけど一応試してみるかー
2021/09/28(火) 12:37:34.11ID:jju60wXc
>>25

>WinForm→WPFも
>ユーザー目線だとそんな変わんないんじゃ

開発者目線だとWPFのが作るのが楽(MVVM、非MVVM関係なく)だからWPF使ってる。
受け入れられやすいようにWinFormっぽい見た目に変えてる。
2021/09/29(水) 08:28:02.15ID:GOP9Dp1g
悲報、WinUI3、ウィンドウのHeight, Widthプロパティ無し

ウィンドウサイズに依存したWinFormみたいな糞アプリを作れなくなるからこれはこれでいいのかも。
いやでも初期サイズぐらいは設定したい。ウィンドウサイズ固定はできなくていいけど。
2021/09/29(水) 08:54:21.60ID:O+WbcMkB
MinWidthとかもないのかな?
2021/09/29(水) 09:38:32.22ID:hXKTXicB
前回のウィンドウ位置・サイズ・位置を記憶しておいてほしいって要望は結構あるからなー。
PInvokeでなんとかなるんだろうか。
2021/09/29(水) 09:44:24.58ID:hXKTXicB
ライブラリはあるからそれで我慢するしかなさそう
https://github.com/dotMorten/WinUIEx/
2021/09/29(水) 10:33:25.99ID:hdmEo5v3
>>33
いちおうサイズや最大最小ボタンの無効化とかを設定できるAPIがある
実際俺が作りかけてるソフトでも初期ウインドウサイズだけ変えてるけど問題なく使えてる
今ちょっと名前は忘れたんだけど、API紹介してるマイクロソフトのページを見ながら実装したと記憶してるので、探せばでてくると思うよ

正直標準でついててほしいけどなあ
2021/09/29(水) 10:34:57.02ID:hdmEo5v3
俺が使ったのは>>36のと違うやつだけど、36のほうが使いやすそう
2021/09/29(水) 13:31:20.42ID:SjiJdI8Y
winui 0.8で作ったやつそういやはじめてnull許容参照型有効にしてみたんだけど、コンパイルエラーでなく警告しかでないの?

null非許容参照型にnullf代入できちまうわ
2021/09/29(水) 13:50:46.96ID:+vfkIeDq
これかな
https://github.com/dotnet/msbuild/issues/6088
2021/09/29(水) 14:34:19.08ID:+vfkIeDq
違うかも、元々警告だった気がする。
エラーだと影響でかすぎるから。
42デフォルトの名無しさん
垢版 |
2021/09/29(水) 17:03:33.12ID:pb5Ym/dQ
初期サイズこそOSに任せたほうがよくないか
2021/09/29(水) 18:59:25.74ID:VwMtEVzw
警告をエラーにするオプションは?
2021/09/29(水) 20:58:16.79ID:DtpEbdQZ
winuiいまいちだな・・・
2021/09/29(水) 22:03:25.40ID:pdK7LZ21
>>44
3世代目で使い物になるのがMSのお約束
2021/09/30(木) 00:17:53.55ID:3U3ppoE9
使えるようになる頃にオワコンと言われるMS……
47デフォルトの名無しさん
垢版 |
2021/09/30(木) 00:25:47.23ID:YPQ+W3Ke
WinUIは3やで
2021/09/30(木) 06:03:19.53ID:5Bjzv+OV
実質WinUI 3(Windiows App SDK 1.0)がバージョン1だから。
まだストアアプリ臭が抜けてなくて、デスクトップアプリとして見ると
「は?こんなこともできないの?」ってレベル。
2021/09/30(木) 07:55:01.00ID:V9jR/S3x
使えるうんぬんより、マイクロソフトがストアで商売したがってるイメージ
また変なの考案するより鍵屋した方が手っ取り早いのに
2021/09/30(木) 14:07:51.32ID:l65pxKZX
ストアはもう諦めてるだろ
諦めてるから開放した
2021/09/30(木) 19:46:10.00ID:Ug+arU8W
てかもうMS自身が自社フレームワーク諦めてElectronとか利用してんじゃん
2021/09/30(木) 20:07:27.48ID:zVzNCdtO
新Teamsからはelectron脱却してWebView2行くんでは?
2021/09/30(木) 20:21:22.07ID:l65pxKZX
でも、一部のクロスプラットホームアプリだけだろ??
電卓に始まってペイントやらフォトビューワとかもろもろはelectronとか使ってないだろ??
2021/09/30(木) 20:26:42.56ID:URu2/Q9n
もうos周りのアプリだけだろうね
一般のアプリは、
Webかスマホかに二分される時代だし
55デフォルトの名無しさん
垢版 |
2021/09/30(木) 20:28:19.61ID:l65pxKZX
まぁ、xamarin(maui)はMicrosoftも諦めてて、microsoftの他の部門であえてこれらを使わないと思うが
2021/10/01(金) 10:43:29.25ID:iSJ4hQHP
MAUI(=Xamarin)使うぐらいなら普通はFlutter使うわな
2021/10/01(金) 15:27:55.77ID:gzQL+yLO
そうなの?
2021/10/01(金) 15:58:19.68ID:3yqFz9yL
VisualTreeHelperというのがありますが、
勉強する価値があるかないか、そしてその理由を教えて下さい。

Visual StudioのXAMLエディターでツリーが見れるようになったので、
今は無用の長物でしょうか?
2021/10/01(金) 16:27:12.58ID:b8RMXs3B
アプリって言うと
昔はデスクトップアプリを指してたんだけど、
今じゃスマホのアプリの事だもんな

さらにwindows11で
アンドロイドアプリがPCで動くようになると、
もう価値がなくなるんでは無かろうか?
2021/10/01(金) 17:03:56.46ID:hHr0ZnR0
Microsoftがスマホでも勝者になってる世界線にいたら、今はみんなxaml使ってたのだろうか ガクブル
2021/10/01(金) 17:08:46.75ID:D1J8zmF5
>>60
Androidも画面定義はXMLだから似たようなもんだよ
2021/10/01(金) 17:18:42.15ID:3yqFz9yL
>>59
自分へのレスですか?
2021/10/01(金) 17:19:52.97ID:hHr0ZnR0
android系では去年からもうflutterでコードベースの宣言的UIやってるし、android/kotlinでもjetpack compose使い始めたし、今年に入ってからxml一切触ってねぇわ
2021/10/01(金) 17:31:51.92ID:hHr0ZnR0
他は進化してるのに、今年正式にリリースされるUIフレームワークでもまだxaml??
絶望だろ
cometは実用になってるのか知らんが

つか、avalonia UIとUnoPlatformとか、Microsoftがしっかり方向性示さなかったからみんなで戦力分散してみんなで自滅してるよな..
2021/10/01(金) 19:19:18.74ID:moK98JZN
UIをXMLで記述するのは筋は良いよ。
ただツール側が大変。
だからXML止めたところは単なる妥協。
2021/10/01(金) 19:24:01.74ID:Utvf4DLW
逆だよ。XMLの方がツールは作りやすい。
でも頑張って高機能なツールを用意するより、手書きの負荷を下げてツールは最低限プレビューするだけの方が、
開発者にとってもツール側にとっても楽であることに業界が気付き始めた
2021/10/01(金) 20:09:22.18ID:b8RMXs3B
CSSのほうが次元が違うぐらい凄いぞ
XAMLじゃマシなUIは作れん
画像はるしか方法がない
そするとアニメーション出来ないけど...
2021/10/01(金) 20:23:02.15ID:x1xpreRL
もうFlutterでよくね?
2021/10/01(金) 20:28:56.74ID:Utvf4DLW
XAMLはWYSIWYGなツールで編集することを大前提として設計されている上、GUIフレームワークのオブジェクトモデルの設計にも引っ張られるから、
処理系として出力だけしか考慮しなくていいCSSと比較するとどうしても記述性や表現力の面では劣る
2021/10/01(金) 20:36:30.93ID:hHr0ZnR0
コードで書く宣言的UI方が100倍楽
普通にコードを書く延長線上でいけるし、if文使って切り替えたり、for文でループ回したり簡単に自由自在

xamlでやろうとするとコードビハインドもできるがMVVMぎちぎちに要求されるからうざいわ
ValueConverterやらTriggerやらVisualStateManagerやら色んな概念でてきていったりきたり
2021/10/01(金) 21:02:00.88ID:Utvf4DLW
MSがツール作るの得意すぎたせいで、みんなWYSIWYGなツールを使ってUIを作ることが当然で開発効率も良いと思い込まされてきたんだよ
ここにいるのはその最後の残党で、彼らは既にXAMLを手書きした方が早いと気付いているにも関わらず、
未だにツールの都合に合わせて面倒なXMLを記述しなければならないという矛盾には気付いていないんだ
もうちょっとだから優しい目で見守ってやってくれ
2021/10/01(金) 21:15:45.36ID:VrVVYUYc
可変レイアウトを前提とするかが分かれ道な気がする
2021/10/01(金) 21:21:42.73ID:E9WNTUHI
WinFormはポトペタに頼るけどWPFはWISYWIGといっても確認用くらいしか使わんなあ
慣れればXAMLべた書きでほぼ思い通りのレイアウトできるし
2021/10/01(金) 23:09:37.93ID:C/dNFuqv
>if文使って切り替えたり、for文でループ回したり簡単に自由自在

それ宣言的って言わんw
2021/10/01(金) 23:17:07.18ID:TQ4JmsDr
>>74
バインディング脳だとそう思うよね
Reactとかやってみればわかるけど、データの流れが単方向になっているならちゃんと宣言的なんだよなあこれが
2021/10/01(金) 23:33:34.54ID:C/dNFuqv
>データの流れが単方向になっているならちゃんと宣言的なんだよなあこれが

「宣言的」の定義が捻じ曲がってる気がする
2021/10/01(金) 23:40:23.81ID:hHr0ZnR0
今時の宣言的は違うだろ
画面更新において宣言的に書けるから宣言的なんだよ
78デフォルトの名無しさん
垢版 |
2021/10/01(金) 23:45:58.73ID:hHr0ZnR0
for文、if文とか入ろうが、それらはある一瞬のUIを記述してるから宣言的なんだよ

if文、for文で、前のUIの状態を変更してる訳じゃないんだよ
2021/10/01(金) 23:46:26.37ID:TQ4JmsDr
>>76
宣言的UI、でググってみ
君の思ってるfor使ったら宣言的じゃないとかいうのは表面的なコーディングスタイルの問題でしかなくて、気に入らないならLINQ使うとかやりようはいくらでもある
UIでいう「宣言的」ってのは、画面がどうあるべきかというのを宣言したら自動的にそのようになるってこと
それがWPFではXAMLであり、React等ではコードによって生成された仮想DOMであるというわけだ
2021/10/01(金) 23:59:18.68ID:VrVVYUYc
いや全く分からん
2021/10/02(土) 00:06:30.03ID:zLcclBIg
https://maku77.github.io/android/fw/compose.html

この最初のセクションのボタンの例を読んでみよう
2021/10/02(土) 00:33:48.60ID:zLcclBIg
宣言的UI この状態のときはこんな画面になるということ記述していくスタイル
if文とかfor文とか使う、使わないとか重要じゃない

というかif文,for文とかその他類似のもの使わないと宣言的UIで画面更新できん
2021/10/02(土) 00:56:36.82ID:yLGZuBe3
ifとかforとかがSGMLの中に出てくるのって美しくないから個人的には好かん
JSPとか最悪だったし
2021/10/02(土) 01:10:52.06ID:zLcclBIg
xamlも同じ
xamlでこの状態のときにこういうUIになるってxmlで記述してるよね
更にこれが進化して
この状態のときにこういうUIになるってifやforなどのプログラムコードで記述してるのが最新の宣言的UI

馴染みのプログラムコードで書けるから楽

制御構文をもたないxmlのようなものでUIを記述するのが宣言的UIというのは昔の話?
2021/10/02(土) 02:26:37.11ID:tcgPJQJ0
XAMLでWYSIWYG使うって君WPF使ったことないでしょ
2021/10/02(土) 02:45:53.54ID:xagjL2JO
むしろ宣言的でないUI定義ってのを教えてくれ
2021/10/02(土) 05:29:37.06ID:XDS1lwbt
UI部にif文書くか?
ロジックが入ると面倒だから、渡されたpropsをそのまま代入しない?
88デフォルトの名無しさん
垢版 |
2021/10/02(土) 06:26:11.63ID:yaQQxYBO
XAMLがいいからWPF使ってるんだよな
2021/10/02(土) 09:22:51.66ID:JC0eHLmL
>>66
IDEの開発元がXMLよりコードでUI書く形式の方がIDE作るのが楽だと言ってるんだが。
コードよりXMLの方が画面イメージが直感的に分かりやすいが、そのメリットはIDE開発側が楽するために捨てたいんだよ。
2021/10/02(土) 09:24:55.11ID:LE4xxzH9
>>86
WPF+MVVMの場合、宣言的なUI定義を記述する方法に関しては>>81のようなスタイルよりも宣言的といえる。コードと違い一切手続きを書いてなくて、バインディングを使った完全に静的な記述のみだからね。
じゃあ何が問題かというと、バインディングの代償としてVとVMとの結合が強くなっているために、実質的にビューが固有の状態を持ってしまっているのに近い状況になるケースが多いことだ。
たとえば>>81のボタンの例で言うと、MVVMでMの状態Aに基づいてボタンを動的に追加したいがMを直接バインドできない場合、
VMの持つコレクションを見て既にアイテムがない場合のみアイテムを追加するようなコードを書くことになる。これは明らかに宣言的ではないよね。
WPF+MVVMなら例えば変更が入るたびに毎回VMをMに基づいて新しく作ってDataContextを設定し直すようにすれば完全に宣言的にできるわけだけど、
これをやると変更の必要のないボタンまで毎回作り直しが走ってしまい、実用的ではない。
それを>>81ではフレームワーク側が自動的に差分を取って賢く画面に反映してくれるというわけ。
2021/10/02(土) 09:26:25.38ID:uPQB1g5P
>>81
・declarative(宣言的)なコード
状態 A なので、ボタンを 3 つ表示する。
・imperative(命令的)なコード
状態 A なので、ボタンを 3 つ表示する必要がある。
ただし、すでに中央のボタンを表示しているので、その左右にひとつずつボタンを追加する。

まじで意味わからんw
2021/10/02(土) 09:33:52.46ID:LE4xxzH9
>>91
>>90にも書いたけど、Mを入力としてVMを返す関数を考え、Mの更新の度に毎回VMを作り直してDataContextにセットし直すことを想像するといい
そうすることでビュー固有の状態に依存する命令的なコードを排除できる
2021/10/02(土) 09:54:12.88ID:RYEShMTz
>>92
要するに
> 差分を取って賢く画面に反映
を誰がやるかって話なの?
94デフォルトの名無しさん
垢版 |
2021/10/02(土) 10:57:58.75ID:XIMD44Dk
WinFormのデザイナーが吐いたコードが宣言的の良い見本
95デフォルトの名無しさん
垢版 |
2021/10/02(土) 12:22:55.97ID:yLGZuBe3
>>91
そういう時は最初から作っておいてVisibilityで制御すんじゃないの
もうあるから追加〜とか普通やらんだろ
2021/10/02(土) 12:44:51.30ID:LHZxrmv8
相変わらず本末転倒ですなあ
2021/10/02(土) 13:43:37.05ID:3200/Rnj
>>95
それを俺に言われても困るw
98デフォルトの名無しさん
垢版 |
2021/10/02(土) 16:03:48.55ID:yaQQxYBO
ほとんどのことはContentControl使えば動的に変更できると思う
2021/10/02(土) 17:46:31.63ID:xagjL2JO
>>90
つまり>>78,82は間違ってるって意見ね
2021/10/02(土) 17:56:52.96ID:GuR5jvpG
このスレ、WPF、XAML知らないで語っちゃう人が居座ってるからなw
昔から知識増えてないし。
2021/10/02(土) 18:42:10.72ID:vbArKetj
>>90
>VMの持つコレクションを見て
WPF+MVVMだと、VMがコレクション持たないと思うんだわ
2021/10/02(土) 18:53:29.17ID:7VMWhHgt
へぇ
2021/10/02(土) 19:02:37.65ID:0lneUYYy
なにかを批判する人がその批判対象のことをよくわかってないってのはよくある話。
そもそも使わんだろうしな。
2021/10/02(土) 19:05:15.85ID:UVsuyRQN
へえ
2021/10/02(土) 20:00:52.83ID:vWt6r1kN
りゅうちぇる
2021/10/02(土) 20:49:49.37ID:9KIjFSXT
静的な記述というからStaticResourceの話かと思ったら、そんなことはなかった
2021/10/03(日) 01:34:09.16ID:CWstO9lB
>>101
親VMが子VMのコレクションを持つことは普通にあるよ
それをItemsControlに渡す

ObservableCollectionを使って自前でやってもいいけど、ReactivePropertyのToReadOnlyReactiveCollectionを使うと楽
https://blog.okazuki.jp/entry/2015/02/15/231155
2021/10/03(日) 11:13:15.32ID:WVFbsqnO
>>103
じゃ批判するなって話だわな
2021/10/03(日) 16:48:20.33ID:Y4PMqtYq
Reactive Extensionsは使ってもいいけどReactivePropertyの使用は禁止します
2021/10/03(日) 17:15:57.76ID:f+cxTxee
>>101
どこを見てそう思ったのか逆に気になる。
2021/10/03(日) 18:41:22.85ID:88/mpgvS
え、駄目なんですか
じゃあPropertyChanged.Fodyにします
112デフォルトの名無しさん
垢版 |
2021/10/03(日) 20:30:28.95ID:HajoosT2
昔はお客さんが「リッチなUIで操作性も最高のクライアントが欲しい」からと、
“デスクトップアプリ”だったんだけど、
今じゃ「デスクトップアプリなので、Webみたいな凝ったUIは作れません! 汗」だからなー−
WPFじゃグラフ系の機能つくると地獄みるし、
(ひたすら要件を潰しまくるとかして... 笑)
時代は変わるよなー−
2021/10/03(日) 20:49:07.54ID:sc5AJJOn
HTMLというかCSSは常に進化し続けているけどPC向けのUIコンポーネントは迷走して結局20年前と大して変わってないからな
最近のPC向けソフトがElectronばかりになってしまうのも仕方がない
2021/10/03(日) 21:03:57.28ID:lp2CmBTm
Webとデスクトップアプリの間で、作れるUIのクォリティに決定的と言えるほどの差は技術的にはまだ無いと思う
未だにデスクトップアプリばかり作ってるようなベンダーは、技術的に進歩のないくだらん仕事ばかりやってきたせいでスキルがないだけだよ
2021/10/03(日) 21:11:16.40ID:f+cxTxee
>今じゃ「デスクトップアプリなので、Webみたいな凝ったUIは作れません! 汗」だからなー−

webの方が凝った表現ができるUIって例えばどんなんだろ?
2021/10/03(日) 21:29:25.72ID:hntqCLGP
> WPFじゃグラフ系の機能つくると地獄みるし、
> (ひたすら要件を潰しまくるとかして... 笑)
> 時代は変わるよなー
有料コンポ買えば解決する話じゃなくて?
2021/10/03(日) 21:35:03.05ID:SkyxlQPu
デスクトップの方がどう考えてもUI楽では?
2021/10/03(日) 21:39:50.67ID:QQiybq/f
ですね。
119デフォルトの名無しさん
垢版 |
2021/10/03(日) 21:45:28.45ID:HajoosT2
昔は
リッチーアプリケーション = デスクトップアプリ
だった。今はその言葉もあんまり聞かなくなったけど

>>115
https://observablehq.com/@d3/gallery
https://threejs.org/
https://resources.jointjs.com/
とか
とにかくググれば凄いのが星の数だけでてくる

>>116
有償コンポーネントは大したものないよ。
唯一データグリッド位かなー−
これだけ有償を選択してる

それ以外の入力コントロールは全部オープンソース OR 自作
2021/10/03(日) 21:52:50.09ID:f+cxTxee
>>119
それってデスクトップならそのまま描くだけじゃん。あとはそのライブラリ自体が高機能なだけだが。
それとも「webなら高機能なライブラリが使える」ってのが言いたいことなんだろうか。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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