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

■ このスレッドは過去ログ倉庫に格納されています
2023/01/22(日) 05:53:16.97ID:oY263ilm
WPF(Windows Presentation Foundation)について語るスレ。

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

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

コードを貼る場合は以下のサイトの利用をお勧め。
https://ideone.com/
2023/07/16(日) 15:41:11.43ID:Kbd6AKbP
もういい加減機能追加が止まったwpfで新規アプリを作りたくないんだが
出来ないことの回避策を探す事に時間取られるWinUI3で作るのも地獄だし
もうずーっとWindowsのGUIアプリは今は作るな時が悪いで停滞してんじゃねーか
2023/07/16(日) 15:48:37.64ID:oB6p9OVz
それを「枯れた」という。
2023/07/16(日) 17:11:14.42ID:Zkk0ia7G
>>645
了解、android studioのデザイナ位で良いのでMSもやって欲しいな。
649デフォルトの名無しさん
垢版 |
2023/07/16(日) 17:26:09.46ID:kPWMqAlO
機能追加って何が欲しいんだ?
一通りあると思うけど。あとは工夫次第だろ。
2023/07/16(日) 17:48:27.06ID:NIqQTkMR
最低限色付きのemojiは対応して欲しいな

今は自分で作るかnugetでいいのを探して使ってる
2023/07/18(火) 15:46:29.61ID:uuDyB+uu
WinUI3公式のサンプル試そうと思ったら依存関係ないとかいう例外出て情報も少なくて早々に投げちゃった
2023/07/18(火) 16:55:57.68ID:0hGflB6j
絵文字よりSVGだろぉ
はよせい
2023/07/18(火) 19:29:02.67ID:5UWIDgaz
webのUI使ってるとWPFの表現力の限界が見える
654デフォルトの名無しさん
垢版 |
2023/07/18(火) 20:27:45.99ID:mNXjpdDn
デスクトップアプリなんてそんなもんだよ。
事実上、WIN32APIの画面でも問題ない。
655デフォルトの名無しさん
垢版 |
2023/07/18(火) 20:56:20.17ID:AK2q1/EQ
事実上?
2023/07/18(火) 22:21:23.88ID:SyIOChPo
GUIはあらかじめ決められたUI/UXガイドラインに沿っていればよくて
あまり奇をてらう必要はないよな。というかかえって害悪だよな。
2023/07/18(火) 22:27:51.77ID:5UWIDgaz
基本的なリングプログレスも用意されていないのでUI/UXデザインがどうとかいう話でもない
2023/07/18(火) 23:05:33.75ID:Isn7rP+W
プログレスバーならあるし
ウエイトカーソルでいいだろ
659デフォルトの名無しさん
垢版 |
2023/07/19(水) 11:41:28.51ID:x9es5cRL
Webは退化
2023/07/19(水) 12:35:30.77ID:A8CV4uql
WPFも外部のライブラリにはMSが出してないUI部品がいろいろとあるじゃん
>>657 のいうwebには外部のライブラリを使わずにhtml,cssの機能ですぐに使えるクルクルってあるのかい?
2023/07/19(水) 12:47:37.05ID:iEaOd/wb
.gif
2023/07/19(水) 20:38:09.57ID:tH39MvqA
>>660
どんなモノでも簡単に作れる
https://blog.stackfindover.com/css-progress-bar/

デザインが先に来て後から実装するのが普通なぐらい
663デフォルトの名無しさん
垢版 |
2023/07/19(水) 21:12:34.35ID:Ov59KYrm
>>662
#2 Pure CSS radial progress bar は三角関数必要だろ。どうやってんだろ。
なんかうまく工夫してんだろうか。
2023/07/19(水) 21:28:55.59ID:5c4o81Qs
その昔、MacがToolboxとして標準ウィジットを搭載してユーザーインターフェースガイドラインを発表したら
GUIのデザインを独自にやりたいといってDOSプログラマは否定的だったとか。
2023/07/19(水) 22:19:12.68ID:1tsx70I0
ProgressRingクラス使うより簡単には見えなかった
2023/07/19(水) 22:41:45.76ID:1biVaVka
>>665
UI設計って基本作りたいラフスケッチ/ワイヤーフレームを先に決めてから実装に落とす

WPFじゃ簡単に出来ないどころか不可能だと思うけど...
2023/07/19(水) 23:41:59.04ID:gAbRA/Vo
WPFは当初から基本的なAPIやコントロールがあまり実装されない
それでwinformsから借りてた
現在はUWPから借りてる
UX/UIの基準がもう更新されていないから今風なコントロールの基準からかなり遠ざかっている
668デフォルトの名無しさん
垢版 |
2023/07/20(木) 15:46:30.38ID:q9wMynRV
numericupdownやchartくらいは実装しておいて欲しかった
2023/07/20(木) 20:05:17.02ID:4+aEc/KW
ただ固まらないように使ってるだけじゃないの
2023/07/21(金) 00:08:18.44ID:UX0onJ+y
numericupdownはたまに作ると「まだ無いのかよ」って毎回がっかりしてる
グラフはともかく、これは必須でしょう
671デフォルトの名無しさん
垢版 |
2023/07/21(金) 06:41:34.68ID:RqIZ05fo
winformsにあるからな。WPF作るとき実装すれば良かったのに。簡単なコントロールだろ。
2023/07/21(金) 15:50:52.27ID:bOOjw2GE
WPF用にコントロールの見た目を全部刷新すれば、もっと使う人も増えたんだろうけどな
WPFで作ってもコントロール表示がWinFormsのままだと萎える
2023/07/21(金) 18:44:40.80ID:wzbrv7/A
WinFormはWin11風に変わるけど
wpfは変わらないのですが…
2023/07/24(月) 19:29:13.93ID:A+Ff56tZ
新しい職場に来てWPFの案件なんですが正直レベルが高すぎてついていけません
今までもやったことはあったんですがまぁバックグラウンドにごりごりコード書いちゃうようなwinformsと大差ないようなので
当然MVVM全開でリアクティブでicommandでみたいな。正直このウインドウどこで呼んでるのどこでクリック処理してるのとかそのレベルでコード読むのが大変です
WPFwithMVVMを勉強するのになにかいいリソースってありますか。日本語書籍とか全然無いですよね。随分昔に出たXAMLプログラミングなる書籍は一通り読んだんですがそれにはMVVM一切無くて
675デフォルトの名無しさん
垢版 |
2023/07/24(月) 21:00:07.43ID:KKtTNygQ
それはキツイな。同情するわ。
2023/07/24(月) 23:28:55.70ID:L/yEgKIa
俺はネットの情報だけでMVVMを覚えたけど、
リアクティブとicommandが何のことか分からない素人なので、
残念ながら助言できない。
677デフォルトの名無しさん
垢版 |
2023/07/25(火) 00:06:37.05ID:GKGh2WSx
ReactivePropertyとかだったらokazukiのブログを一通り読むと少しは分かるかな
2023/07/25(火) 00:52:00.23ID:kw8ArH5v
リアクティブでごりごりされてたら読む気がおきない
2023/07/26(水) 11:55:11.15ID:BzcAP5MI
wpf のShowModalでダイアログ出しても
タスクバーで親ウインドウ選べてタブでフォーカス移動とか出来るのは
なんか対策ありますか?
2023/07/26(水) 17:54:38.19ID:iOxX8HKc
普通にOwnerの設定忘れじゃなくて?
2023/07/27(木) 19:09:01.36ID:T1U/urv+
Ownerは設定しています
マウスで親ウインドウをクリックならちゃんと子ウインドウがチカチカしますが
タスクバーで選ぶと選べてしまいます
2023/07/27(木) 20:05:05.04ID:4LOg1fU5
>>679
俺のWPFのWindowクラスにはShowModalというメソッドがない
Ownerを設定してShowDialog()したらフツーにあんたが希望してる動作になったぞ
683デフォルトの名無しさん
垢版 |
2023/07/27(木) 20:56:02.18ID:83Yj8N2k
そう。多分勘違い。
2023/07/28(金) 01:56:53.18ID:fJMcb68e
申し訳ありません確認不足でした
スペルはミスです
それとメインウィンドウからの一段回目のダイアログは問題ありませんでした
サブのサブを出したときに変な感じです
imgur.com/a/Ny0LW7A
2023/07/28(金) 02:42:36.52ID:tnpoO9lU
これは知らなかったな
マウスで操作する分には何も起こらないけど
キーボードで操作したらボタン押せちゃって、もう1個ウィンドウが開いた
2023/07/28(金) 02:47:31.78ID:tnpoO9lU
サンブルとしてボタンをクリックしたら、サブウィンドウが出るように作ったってことね
2023/07/28(金) 03:22:34.24ID:V2VuB5te
・Win32 API の EnableWindow で開く前に自身を無効化しておく(false)
・子の Closed イベントを購読しておいて子が閉じた時に Enablewindow を使用して有効化(true)する
・そのあとで子を ShowDialog

でいけないかな
2023/07/28(金) 03:36:24.33ID:V2VuB5te
Closed イベントじゃなくて ShowDialog の後で EnableWindow でもいいかも
子が閉じるまで処理止まるはずだから
2023/07/28(金) 03:42:52.01ID:V2VuB5te
var hWnd = new WindowInteropHelper(this).Handle;
EnableWindow(hWnd, false);
win.ShowDialog();
Enablewindow(hWnd, true);

みたいに。試してないが。
2023/07/28(金) 09:10:07.71ID:rw0v5Bhm
>>684
俺の環境だとまったくそうならない。win11でのvs17.6.5で.net framework4.8.9167.0
バージョンは何?
2023/07/28(金) 12:08:54.40ID:tnpoO9lU
>>684
キーボードで操作出来ちゃうのは、↓で防げるな
子ウィンドウをShowDialog()する前/後で、親のウィンドウのIsEnabledプロパティを無効/有効

>>689
効果なかった
2023/07/28(金) 23:47:06.43ID:fJMcb68e
>>690
win10, win11どっちもで
vs2017express と vs2022community
.NET Framework4.8 と .NET6

vs2022からデバッグで起動すると
そもそも動きがダメダメで駄目だった
exe直接開かないと話にならない
何だこりゃ
2023/07/29(土) 11:50:08.48ID:I6XWshKt
そもそもモーダルwindowからモーダルをまた開くのがおかしいのでは?
2023/07/29(土) 16:07:13.22ID:KgtriUaM
>>692
バージョンにそれほど差異はなさそうだ。
だがこっちで.NET 6と7でも試したがどうにも再現しない
コードはこれ
https://i.imgur.com/3ImqsVk.png
https://i.imgur.com/w3gN1Bi.png

仮想環境上のほぼ素のWin10に.NET Framework 4.8で作ったexeを持っていって実行しても再現しない

他の人は再現しているようだから起こるんだろうね。だが俺には無理そうだ
最後に念のため当方の環境を書いておくよ

Windows 11 Pro
バージョン 22H2
OS ビルド 22621.1992
Windows 10 Home
バージョン 22H2
OS ビルド 19045.3208

Microsoft Visual Studio Community 2022
Version 17.6.5
VisualStudio.17.Release/17.6.5+33829.357
Microsoft .NET Framework
Version 4.8.09032

RuntimeInformation.FrameworkDescriptionで取れる.NETのバージョン
.NET Framework 4.8.9167.0
.NET 6.0.20
.NET 7.0.9
2023/07/29(土) 16:57:46.82ID:zcThIP3a
>>694
そのコードで再現する
実行時の操作方法が合ってないと思われ
タスクバー使ってない気がする
2023/07/29(土) 17:29:00.89ID:k66xJEd7
.vsとbinとobj削除したプロジェクトzipでくれ
2023/07/29(土) 19:57:44.82ID:I6XWshKt
だからShowDialogしたwinodwからShowDialogするアプリってなんだよ
実際
2023/07/29(土) 20:31:56.47ID:rLsm4ZL4
普通にありそうだけど。
例えばモーダルの設定画面から起動するファイルダイアログとか。

VSのオプションで、「プロジェクトおよびソリューション」→「場所」とか
2023/07/29(土) 22:57:25.29ID:I6XWshKt
ああそういうことか

やっとお前らが何を言ってるのか理解した
結論としてはモーダルwindowをタスクバーに出してるんだろ
それじゃダメ

win.ShowInTaskbar = false;
その後にshowdialog
2023/07/29(土) 23:03:32.75ID:I6XWshKt
何か特殊な状況とかあってハマってるのかと思ったら古来から伝わる話だった
2023/07/30(日) 00:27:23.64ID:SWW1XK+d
>>695
なった、なった。俺の勘違いだった。すまん

モーダルのダイアログボックスがモーダルのダイアログボックスを開くことはある。たとえばこんな感じ
https://i.imgur.com/wWF3YI5.png

すでに >>699 に書かれてるとおり、この動作がこれまで問題になってないのは、上の画僧のようにモーダルにするダイアログボックスはタスクバーに表示させないのがUI作成の作法だからだろう
モーダルにするダイアログボックスというのは所有ウィンドウと内容が強く関連し、その一部のようなものだからモーダルにするのだし、単独では存在しないのだから、タスクバーに出すのは先頭の所有ウィンドウのみにすべきだと思う

よって、ShowInTaskbarをfalseにすれば問題解決
2023/07/30(日) 09:17:38.39ID:ra9EA2uQ
>>701
こんなん普通だろ
モーダルウインドー表示中に
システムエラーでるパターンは大体こうなる
2023/08/01(火) 18:51:53.90ID:7eSyhjys
いろいろやってみたけど
モーダルではない Show で出したウインドウからShowDialogしてもダメダメだし
メインウィンドウ以外はタスクバー使うなって事なのかな?
最小化すると懐かしい雰囲気が味わえるね
IsEnabledで被害を防ぐのはいいんだけど戻ったときに親のフォーカスがなくなるのが難点
子ダイアログではなく親ウインドウをタスクバーから消すのもやってみたがウインドウまるごとチラつくのでやな感じ
これなら親を消すほうがいいな
2023/08/01(火) 20:45:37.33ID:XpUMrXC2
今更どうにもならんとは思うが、ページ遷移型で組んでコンテントダイアログ使うのが一番いい
ウインドウは一つだけだから何も考えなくていいからね
2023/08/04(金) 22:18:29.56ID:p+l3H84b
久しぶりにwinUI3触った
あんまり進展はないようだ

GUIデザイナがないのは致命的で知らないコントロールの機能を手探りで実装していくのは大変だった
優秀な人には余裕なのかもしれないけどここまで辛い状況とは思わなかった
知っている人向けなんだよ全部が
2023/08/04(金) 22:50:44.24ID:p+l3H84b
UWPで開発してそれをWinUI3に移植するのが近いのかと思ったけど
それも怪しい
なんか思ってたのと全然違う
2023/08/04(金) 22:51:51.21ID:H/tEfCiJ
>>705
HTML、CSS とかはどうやってるの?
2023/08/04(金) 22:54:22.35ID:p+l3H84b
>>707
ググれば山ほど記事が出てくるでしょ?
国内外問わずに

winUI3はそれがない
あってもMSのクソドキュメント
2023/08/04(金) 22:58:35.63ID:p+l3H84b
WinUI3は基本のテンプレートのルートにあたるレイアウトコントロールがstackpanelになってる
しかもorientationがhorizontal

XAML入門者がGridをデザイナ抜きで使いこなせるとは思えないからだろう
Gridも仕様変更か追加されてて普通に使いにくい
2023/08/04(金) 23:02:46.68ID:p+l3H84b
デザイナがあればツールボックスにコントロールが一覧表示される
そこに表示されているアイコンや名前から機能を類推して選択することが出来る
それがない

手探りはまずいと思ったのかストアからギャラリーがインストールできるようになってるけど
出来が悪い
残念ながらサンプルとコードが一致してない
コピペで動くようにすらなってない
2023/08/04(金) 23:36:37.10ID:0JBhJhQY
HTML扱えたらXAMLも似たようなものだったけどな
712デフォルトの名無しさん
垢版 |
2023/08/04(金) 23:39:18.35ID:ma+YRo6X
私みたいな出来の悪い人はWinUI3挫折してWPFでやってる
2023/08/04(金) 23:50:32.05ID:YGjl9jfE
>>711
2023/08/04(金) 23:52:28.56ID:oW25VfjB
>>709
GridよりStackPanelの方がレイアウト時の負荷が軽いんじゃなかったっけ
2023/08/05(土) 00:01:18.60ID:MhNBXByr
デザイナー作るのそんな難しくないのにな。
やる気の問題か?
2023/08/05(土) 00:06:20.15ID:49wwu17R
逆に Grid をデザイナで調整する方が難しくない?
余計な Margin が設定されたりするし
プレビュー程度にしかつかわないな
2023/08/05(土) 00:14:34.58ID:ddH4mDWJ
WinUI3のテンプレートの出力を小一時間イジっただけで全部把握しているように振る舞えるメンタルは尊敬に値するわw
2023/08/05(土) 00:16:24.64ID:ZG2jS4fE
VBからポトペタでやってきた人にはそれができないと困っちゃうのかな?
2023/08/05(土) 08:48:23.47ID:Jl4w36Dl
xamlをGUIで設計する奴なんておらんやろ・・・おらんやろ?
2023/08/05(土) 09:32:31.05ID:K+IHkxAt
バインドの書式とかサッパリだからつこうとるよ
2023/08/05(土) 09:48:07.14ID:wQaB7TT9
>>717
テンプレートってこんなだぞ?
頭大丈夫か?
<Window>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button x:Name="myButton" Click="myButton_Click">Click Me</Button>
</StackPanel>
</Window>
2023/08/05(土) 09:50:01.90ID:wQaB7TT9
>>719
バインドはGUIでやってる
IDEでサポートされるようになってWPFをまあまあ使うようになった
それまでは全然使わなかったけど
2023/08/05(土) 10:05:49.53ID:ddH4mDWJ
>>721
少し上で5連投している彼のことだよ
2023/08/05(土) 10:08:37.40ID:wQaB7TT9
>>723
だから俺だよ
2023/08/05(土) 10:25:30.61ID:wQaB7TT9
WPFのデザイナはドンドン進化を続けていてかなり便利になっている
かなりの部分が手で書かなくても確認し選べる
自分のミスも見えるし自動入力なのでそのそもミスが起こらない
2023/08/07(月) 14:28:05.32ID:xnajTjTc
コントロールのデザインはいつ進化しますか?
2023/08/07(月) 20:31:20.53ID:ianDibNu
webview2が出て全て解決したはずだが
2023/08/08(火) 01:05:30.69ID:IyV15CeD
ファイルをwebview2にドラッグ&ドロップした時、セキュリティをすっ飛ばしてファイルのフルパス取得出来るようになった?
2023/08/08(火) 07:57:17.91ID:rQ7TZ/NI
WinUI3は流石に安定し始めているしデザインだけじゃなくてxamlも進化しているし
そろそろ使い始めても良いんじゃないかな
unpackagedでコンパイラの出力をそのままコピーするだけで動くのも大きい
2023/08/08(火) 08:44:11.20ID:6xGdan8t
ユーザー報告のissue放置しまくってるのに安定とはこれいかに
2023/08/08(火) 08:46:49.69ID:+QZUW2Vj
WinUI3はWPFよりも流行らずに死ぬと思うね
2023/08/08(火) 09:34:36.21ID:12xdoC8F
皮WPF+WebView2+reactでok(*бωб)
2023/08/08(火) 11:08:28.84ID:DR6HV6l/
Googleのカイゼン活動についていく気は無い
2023/08/08(火) 13:12:34.17ID:egrx38+v
でもマテリアルデザインは使うんでしょう?
まさか生WPFのまま使い続けてるとか・・・?
2023/08/09(水) 11:20:59.99ID:+lD1iL0g
VirtualizingStackPanel.IsVirtualizing="True"なItemsControlでスクロール位置を保存したい。
ScrollViewerのScrollableHeightやExtentHeightは仮想表示がONのためか、同じ表示内容でも毎回変化してしまい
指標となる不変の高さが存在しない

何かいい方法ないですか?
2023/08/10(木) 13:28:25.50ID:Aji0Vi4e
>>735
1. 可視範囲内で先頭の要素のインデックスを保存しておく。
2. 復元時は ItemContainerGenerator.ContainerFromIndex
を使ってインデックスから要素を取得。
3. その要素の BringIntoView を呼び出す。
みたいな感じでいけるかも。
2023/08/10(木) 16:54:00.98ID:mo1X7ejl
>>736
ありがとうございます。
表示内容側からアプローチですね
がんばってみます
2023/08/10(木) 19:57:26.05ID:doLXtH58
WPFのWindows 11 themeも全然進んでねぇし
WinUI 3といいひどすぎる
2023/08/11(金) 13:37:47.66ID:JGKsK+J9
なんもいじってないvisualstudioだと画面のビジュアルが上に表示されてその下にxamlのエディタが出るじゃないですか
それでまぁそのエディタが狭い。数百行とか1000行を超えるような画面になるとまぁあの狭い画面じゃまったく把握できない
みなさんどういう風にいじって開発されてます?
2023/08/11(金) 13:47:06.17ID:HA39DxTe
>>739
モニタがフルHDだったりしない?
WQHD だと特に狭いと感じないな。
縦向きにするといんじゃね?
2023/08/11(金) 20:02:52.96ID:dFkQ56Sr
>>739
上下ではなく左右に
2023/08/12(土) 23:21:45.24ID:CdwkORH9
あー左右に並べられたんですね。ボタンで一発ですか。ありがとうございました
なぜ気づかなかったかな
2023/08/15(火) 19:02:52.22ID:d9T9MMRf
>>738
Win11のGUIがなぜ一向にFluent化されずハイスペックマシンでもカクついたりするほどパフォーマンスが悪いのか疑問に思ってたんよ
ところが海外でWin11からシステムファイルをどこまで削除して起動できるかという試みがあって
極限まで削除したその結果なんとGUIがWin10そのものだったんよ
要するにWin11はWIn10のShellにXamlを使ってWinUIでOSのGUIを個別に作ってやがったんだよ

まさかWin11のGUIってOSネイティブじゃないからコピーなんかのコモンダイアログすらFluent化されてないんじゃ・・って怪しんでた通りで唖然としたわ

だってデスクトップだけ見てもmacOSやLinuxはGUIがアップデートされたらネイティブだからすべて統一されてるじゃん
こんな統一感のないGUIは世界中探してもWin11だけよ
まさかWindowsのコアであるタスクバーやExplorerやタスクマネージャーまでWinUIだったとは思わんかったわマジでMSってもうまともなエンジニアがおらんのやなって思ったわ
2023/08/15(火) 20:19:13.24ID:sK7X6CvI
winui commnity callの動画見てもエクスプローラでWinUI使ってるって言ってるやろ
具体的にはしらんがで、
エクスプローラで使われてる機能のバグだけ修正して終わり
2023/08/15(火) 20:27:56.15ID:WNL7znVK
>>743
その海外のサイト教えて
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。