X



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

0261デフォルトの名無しさん
垢版 |
2023/12/15(金) 00:03:32.47ID:6ERSwW2Y
winformsって誰でも簡単にGUIが組めるという点で他の言語も含めて未だに手軽さで上回るフレームワークはないんじゃない?
廃れるのは惜しいと思ってるので機能強化してくれ
0262デフォルトの名無しさん
垢版 |
2023/12/15(金) 08:12:39.32ID:mMPUEDZk
- PCでもスマホでもWebでも(ほぼ)同じ体験ができる
- 直感的なステート管理
- UIスレッドとバックグラウンドスレッドの処理分けが簡単にできる
- まともなスケーリング、レスポンシブ対応
- モダンな見た目のUI、コントロールが充実している

こういうフレームワーク要件が業務アプリですら当たり前になってきてるのに
今さらwinformsで作る気にはとてもなれないわ

100歩譲って、
C#初心者がで最初のGUIアプリ作る程度の規模なら選択肢の一つに入るかもしれんけど、
10年前ならともかく、先のないwinformsで今それやる必要ある?って感じ
0264デフォルトの名無しさん
垢版 |
2023/12/15(金) 11:15:39.52ID:11EqJg0P
>- PCでもスマホでもWebでも(ほぼ)同じ体験ができる
ネイティブアプリに同じ体験を求めるのは間違い
Webアプリの体験で十分なら運用コストが高くつくネイティブアプリをわざわざ作る必要はない

>- 直感的なステート管理
これは開発者の技量次第
winformsでもviewとmodelをきちんと分離してやればいいだけで他のフレームワークでも同じこと

>- UIスレッドとバックグラウンドスレッドの処理分けが簡単にできる
簡単にできるやろ
winformsだとできないと思ってる意味がわからん

>- まともなスケーリング、レスポンシブ対応
これは確かに今のwinformsでは無理

>- モダンな見た目のUI、コントロールが充実している
サードパーティのコントロール使えばいいよ


ってことで問題は4番目だけ
スケーリング・レスポンシブ非対応でもお手軽さが優先されるなら全然あり
0265デフォルトの名無しさん
垢版 |
2023/12/15(金) 12:01:49.81ID:f+kxwbVJ
>>264
そこがなぁ。
最近のノートは高分解能パネルだし。
125とか150%がデフォだよ。
0266デフォルトの名無しさん
垢版 |
2023/12/15(金) 12:06:55.05ID:aw2NyDT2
基本的にWinForms使いの技量は低いという認識です
ViewとかModelとか言われても困惑すると思います
0267デフォルトの名無しさん
垢版 |
2023/12/15(金) 12:15:51.64ID:11EqJg0P
>>266
マジかよ!!
そんなに技量の低い人たちにも使わせることができるって凄いメリットじゃん
スケーリング捨てても開発費が格段に安上がりになるんだから依然有力な選択肢だな
0269デフォルトの名無しさん
垢版 |
2023/12/15(金) 15:34:20.94ID:bcLipQ//
WPFUIはバグだらけってあるけど大丈夫かなぁ
WPFは比較的高い品質たもってるから維持してほしいわ
0270デフォルトの名無しさん
垢版 |
2023/12/16(土) 10:54:32.73ID:ibvUcuG/
細々とWPFは続くんだろうな
後10~20年もしたら自分らは抜けていくからその頃に無くなるんだろうな
0271デフォルトの名無しさん
垢版 |
2023/12/17(日) 12:49:15.96ID:ghtlLgtu
5年後にはWinUIに置き換わっているんだろうね
0274デフォルトの名無しさん
垢版 |
2023/12/17(日) 15:18:42.34ID:kblX0SaG
>>273
君はやたら攻撃的だけど、具体的にどのバグが問題なのかな?
流石に1年経って安定していると思えるが
0275デフォルトの名無しさん
垢版 |
2023/12/17(日) 16:17:42.91ID:Bdgrr9ck
バグの存在しない環境は存在しないが
君はandroidとか他の環境のアプリ作った事あるのか?
よほどの事がない限りユーザーも多いのもあるから
バグを自ら報告するはめにもならんし全然品質が違うんだけど
0279デフォルトの名無しさん
垢版 |
2023/12/17(日) 19:49:22.72ID:Ywul0fru
XamlスキーマはUWP(WinUI2)とWinUI3で共通なんだからWinUI3のドキュメント不足とか表面的なんだよな
UWP期間なしでReunionになってればとつくづく思うけど
0280デフォルトの名無しさん
垢版 |
2023/12/17(日) 19:54:46.27ID:Ywul0fru
AppContainerはなんとなく安心感があるから最初から選択制なら良い構想だったとは思う
0282デフォルトの名無しさん
垢版 |
2023/12/18(月) 20:12:28.49ID:L6eol17U
ListBoxで質問です。
アイテム数が500個くらいになると最初の表示が数秒かかります。
データを遅延ロードさせると良いのだが、TabControlに貼り付けているのでタブが選択されていないと切り替えた時点で数秒かかります。
何か良い方法ありますか?
0283デフォルトの名無しさん
垢版 |
2023/12/18(月) 21:17:21.94ID:lFe+Lrys
>>282
<ListBox.Template>
<ControlTemplate>
<ScrollViewer VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>

<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
0284デフォルトの名無しさん
垢版 |
2023/12/18(月) 21:51:49.05ID:L6eol17U
>>283
ありがとうございます。
明日試して報告します。
0285デフォルトの名無しさん
垢版 |
2023/12/18(月) 22:00:59.38ID:L6eol17U
>>283
ところで
VirtualizingStackPanel.VirtualizationModeは使っていますが、ControlTemplateのところが肝なんですか?
0286デフォルトの名無しさん
垢版 |
2023/12/18(月) 22:15:10.22ID:lFe+Lrys
>>285
それでも多分大丈夫。
ItemsPanelTemplate が重要で、これを VirtualizingStackPanel に変えてやらないと仮想化されない
0287デフォルトの名無しさん
垢版 |
2023/12/18(月) 23:29:05.09ID:GG8kxZK0
avaloniaのドッキングライブラリの
ライセンスがGNU afferoに変更されてるな
ただコミット履歴見ると元に戻す?
0288デフォルトの名無しさん
垢版 |
2023/12/19(火) 08:32:03.73ID:xeYnIpZs
>>286
こんな感じですが、初回表示の数秒待ちは変わりませんでした。
親Gridの1区画をTabControlで使い、その中にGridを切って、ListBoxの16個の要素を揃えて展開します。
<UserControl.Resources>
 <ItemsPanelTemplate x:Key="ListBoxItemTemplate">
  <VirtualizingStackPanel/>
 </ItemsPanelTemplate>
 <DataTemplate x:Key="TestDataTemplate">
  <Grid>
   <Grid.ColumnDefinitions>
    <ColumnDefinition Width="3*" />
    途中省略
    <ColumnDefinition Width="3*" />
   </Grid.ColumnDefinitions>
   <TextBlock Grid.Column="0" Text="{Binding Data0}" />
   <ComboBox Grid.Column="1" ItemsSource="{Binding Data1}" />
   途中省略
   <TextBox Grid.Column="15" Text="{Binding Data15}" />
  </Grid>
 </DataTemplate>
</UserControl.Resources>
<Grid DockPanel.Dock="Top">
 <ListBox x:Name="PointDataListBox" Margin="0,0,0,0"
  ItemsPanel="{DynamicResource ListBoxItemTemplate}"
  VirtualizingStackPanel.IsVirtualizing="True"
  VirtualizingStackPanel.VirtualizationMode="Recycling">
  <ListBox.ItemTemplateSelector>
   <local:ListBoxTestDataTemplateSelector TestDataTemplate="{StaticResource TestDataTemplate}"/>
  </ListBox.ItemTemplateSelector>
 </ListBox>
</Grid>
最初はDataGridで設計していましたが、TextBoxの各種イベントを使いたく、私の能力では困難でListBoxに代えました。
0289デフォルトの名無しさん
垢版 |
2023/12/19(火) 13:10:10.31ID:ElmGtroK
>>288
TabControl はタブが切り替わるたびにコンテンツの Load と Unload が行われちゃうから、
見た目がタブでなくても良いならラジオボタンで表示を切り替えるようにするとか?
↓こんなイメージ
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibility" />
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<RadioButton x:Name="Page1" Content="Page1" />
<RadioButton x:Name="Page2" Content="Page2" />
<RadioButton x:Name="Page3" Content="Page3" />
</StackPanel>
<Grid Grid.Row="1" Visibility="{Binding IsChecked, ElementName=Page1, Converter={StaticResource BooleanToVisibility}}">
<TextBlock Text="Page1" />
</Grid>
<Grid Grid.Row="1" Visibility="{Binding IsChecked, ElementName=Page2, Converter={StaticResource BooleanToVisibility}}">
<TextBlock Text="Page2" />
</Grid>
<Grid Grid.Row="1" Visibility="{Binding IsChecked, ElementName=Page3, Converter={StaticResource BooleanToVisibility}}">
<TextBlock Text="Page3" />
</Grid>
</Grid>

見た目が TabControl じゃないとだめならそれっぽく調整するか、
↓の回答にあるような TabControl を継承したカスタムコントロールを作るか。
https://stackoverflow.com/questions/2193166/how-do-i-prerender-the-controls-on-a-tabitem-in-wpf
0290デフォルトの名無しさん
垢版 |
2023/12/19(火) 13:55:08.70ID:xeYnIpZs
>>289
建設的なご意見ありがとうございます。
TabControlじゃなくてもOKです。
画面切り替えしてデザイナーで確認できるので便利と思っていた程度でユーザーコントロールにしてからは個別でデザイナーで確認しているので問題ないです。
タブのHeaderも表示させてなくて、タブの切替は別のListBoxを選択でしたのでラジオボタン部は不要です。
この場合で非表示状態(タブで隠れていたListBox)から表示に切り替わった時には既にレンダリングは終わっているのでしょうか?
やってみればわかるのですが、ちょっと改造に時間がかかるので報告が遅れそうです。
0291デフォルトの名無しさん
垢版 |
2023/12/20(水) 19:00:37.62ID:lNpxQW16
視覚的なレンダリングという意味なら、非表示なので当然レンダリングはされないけど、
非表示状態であっても VisualTree 上には存在していてロードされている。
TabControl の場合は、未選択のタブは単に非表示になっているわけではなく VisualTree からも削除(アンロード)されるので再度タブが選択されたときはロードからやり直し、みたいな感じ
0293デフォルトの名無しさん
垢版 |
2023/12/20(水) 21:08:12.82ID:Ygn7ucBv
>>291
すみません、今日は別件でやれなかったです。
TabControlだと最初の選択で数秒かかり(これがレンダリングかと思ってた)、別のタブを選んで戻ってきた場合は瞬時に現れます。なのでロードされっぱなしと思っています。キャッシュみたいな動作です。
0295デフォルトの名無しさん
垢版 |
2023/12/22(金) 18:19:02.09ID:gOgQeuuA
ウィンドウを前回開いたサイズや位置で開くような機能ってテンプレートで実装してあってもいい気がする
0296デフォルトの名無しさん
垢版 |
2023/12/22(金) 19:28:03.83ID:FtsWuxoj
>>295
画面構成の変更(含むスケーリング変更、多画面、リモートデスクトップ)も含めてちゃんと対応するのが面倒だよ
対応しないのも潔いかと
0297デフォルトの名無しさん
垢版 |
2023/12/22(金) 21:52:48.66ID:gOgQeuuA
ちょっと試してみたらTemplete Studioで実装されてました
0298デフォルトの名無しさん
垢版 |
2023/12/23(土) 08:57:37.57ID:GXgODteM
DataGridでItemSource="{Binding x}"じゃなくて{Binding}とは何ですか?
何をBindingするのですか?
0300デフォルトの名無しさん
垢版 |
2023/12/23(土) 10:14:14.71ID:GXgODteM
>>299
具体的な説明お願いできますか?
0302デフォルトの名無しさん
垢版 |
2023/12/23(土) 16:40:24.00ID:uqZ8LCpm
上の階層のDataContextをそのまま指定する場合の省略した書き方
0303デフォルトの名無しさん
垢版 |
2023/12/23(土) 21:10:51.04ID:GXgODteM
>>302
ありがとうございます。
コードでbindingする場合は不要ですね。
0304デフォルトの名無しさん
垢版 |
2023/12/25(月) 11:44:01.94ID:gvlmkkTg
DataGridのGotMouseCaptureでセル選択を記録していて、セルを選択してからDataGridのスクロールバーを操作するとセルを選択してないのに同じイベントが発生します。
以下のコードです。
void hoge_GotMouseCapture(object sender, MouseEventArgs e) {
var datagrid = sender as System.Windows.Controls.DataGrid;
var cell = (System.Windows.Controls.DataGrid)e.Source as System.Windows.Controls.DataGrid;
if (datagrid == null || cell == null) return;
TestData param = (TestData)cell.CurrentItem as TestData;
if (param == null) return;
int column = cell.CurrentColumn.DisplayIndex;
セルじゃない場所はcolumn行までにreturnして欲しいのだが、こんなコードは駄目ですか?
0305デフォルトの名無しさん
垢版 |
2023/12/25(月) 15:24:51.68ID:WPFHf4JU
>>304
mousedownイベントからセルの行と列を見つける記事を見つけて目的達成しました。
0308デフォルトの名無しさん
垢版 |
2024/01/22(月) 16:08:46.89ID:Xo5l1JGj
教えてちょうだい。
<DataGrid FontSize=”24”>で定義している表ですが、DataGridTextColumnの列は24サイズで表示されますが、DataGridComboBoxColumnの列は反映す、デフォルト(12)のままです。
ぐぐっても見つからないのでお願いします。
0309デフォルトの名無しさん
垢版 |
2024/01/22(月) 16:21:08.89ID:Xo5l1JGj
>>308
すみません。解決しました。
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="TextElement.FontSize" Value="24"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
0310デフォルトの名無しさん
垢版 |
2024/01/25(木) 11:11:30.15ID:lR1UwrQ7
あれ? Windows11では、WPFでUwpDesktopのContract取れなくなった?
Windows10から11にグレードアップすれば大丈夫のようだが、Windows11直接インストールはペケだね。
これは、周辺デバイス使うのに、いよいよWinUI3に移行しかないかもしれんね。
0311デフォルトの名無しさん
垢版 |
2024/01/26(金) 10:57:55.29ID:ZNHEQQkl
まあ普通に「何言ってんだこいつ?」と書くと検索して何かを発見するのだろうか?
0312デフォルトの名無しさん
垢版 |
2024/01/26(金) 13:34:50.44ID:T/VX3odp
質問文を書いている内に思考が整理されて、そのまま自己解決したり検索キーワード思いついたりすることあるよね
0313デフォルトの名無しさん
垢版 |
2024/01/26(金) 21:39:41.26ID:7E0uWKmf
もしかしてUwpDesktopをMicrosoft.Windows.SDK.Contractsに置き換えれば済んじゃう話かな
0314デフォルトの名無しさん
垢版 |
2024/01/26(金) 22:01:55.40ID:fmaEcqlH
reunionとか結局迷惑なだけだったな
c++開発者救おうとして.netユーザーも死亡とか笑えない
最初からWPFのwin11theme対応や素直にUWPアップグレードしときゃよかったのに
0317デフォルトの名無しさん
垢版 |
2024/01/29(月) 11:41:56.56ID:uz1rJL/E
>>316
C++使いってクライアントアプリのGUIについてはかなり保守的な傾向があるし、パッケージ開発が中心のため開発の人月市場が小さい
大した金にならないのに延々サポートし続けなきゃいけない面倒な客が増えるだけだよ
0318デフォルトの名無しさん
垢版 |
2024/01/29(月) 11:42:52.35ID:uz1rJL/E
>>316
C++使いってクライアントアプリのGUIについてはかなり保守的な傾向があるし、パッケージ開発が中心のため開発の人月市場が小さい
スキルはあるから適切に誘導すれば比較的容易に移行してもらえるだろうけど、
大した金にならないのに延々サポートし続けなきゃいけない面倒な客が増えるだけだよ
0319デフォルトの名無しさん
垢版 |
2024/01/29(月) 11:52:23.33ID:044/aFLW
>>316
C++使いってクライアントアプリのGUIについてはかなり保守的な傾向があるし、パッケージ開発が中心のため開発の人月市場が小さい
大した金にならないのに延々サポートし続けなきゃいけない面倒な客が増えるだけだよ
0320デフォルトの名無しさん
垢版 |
2024/01/29(月) 11:52:44.34ID:044/aFLW
>>316
C++使いってクライアントアプリのGUIについてはかなり保守的な傾向があるし、パッケージ開発が中心のため開発の人月市場が小さい
大した金にならないのに延々サポートし続けなきゃいけない面倒な客が増えるだけだよ
0323デフォルトの名無しさん
垢版 |
2024/01/29(月) 12:41:32.85ID:cb2ag/yV
未だにMFC使うのはwinformのc#を知らないMFCおじさんなんだろう。
と自分のことを棚上げする奴
0327デフォルトの名無しさん
垢版 |
2024/01/30(火) 11:02:24.25ID:8UtUOKmo
>>326
MFCは3年前に足洗ったからもう見たくもないわ。
0337デフォルトの名無しさん
垢版 |
2024/02/08(木) 16:32:24.17ID:y8Tm2IvK
実装の早い奴と評価され仕事が増やされる
その後無駄実装がバレて減給
仕事は増えたまま
0339デフォルトの名無しさん
垢版 |
2024/02/08(木) 18:04:10.45ID:ShTXBa9s
拝承はステップ数報告しないと品証部が承認しないとか言ってたな
0341デフォルトの名無しさん
垢版 |
2024/02/08(木) 18:29:50.82ID:wtMNZ0uh
10年ぐらいWindowsの世界から離れてるんだけど、
10年前はFormもWPFもメンテナンスモード状態で
ストアアプリは低機能過ぎて論外、ということで
UIに決定的な選択肢が存在しない状態だったと思うけど、
ひょっとして今もまだそのグダグダ状態が継続してるの?

あいかわらずMSはUIに関して何のロードマップも示しておらず、
WPFが消極的に第一選択って状態?
0342デフォルトの名無しさん
垢版 |
2024/02/08(木) 18:33:12.53ID:wtMNZ0uh
追加質問
今確認したらMVVMのスレがなくなってるみたいだけど、
今もMVVMは推奨されてるの?あるいはオワコン化?

個人的にはMVVMには疑問しか感じなかったのでオワコン化してくれてると嬉しい
0343デフォルトの名無しさん
垢版 |
2024/02/08(木) 18:34:59.11ID:bFznU8/N
>>333
それはよくわからない。。
同じマークアップ言語でいうと html とか css とかはどうしてるの?

俺が言ってるのは今どきステップ数を指標に用いるような体制だと、
そのこと以外でも今後色々と時代遅れなことをやらされるんじゃないかなという老婆心。
DRYを無視したコピペプログラマの方が、
最小限のコードでメンテしやすいコードを書いた人より生産性が高いと評価される、
みたいなことが起こり得る。
実体験。
0345デフォルトの名無しさん
垢版 |
2024/02/08(木) 21:39:05.80ID:kAHUeLc0
>>341
MSとしては今は一応WinUI3推しなのかな
後にはMAUIも控えてる
が、完成度がお察しなの相変わらずで状況は変わってない

>>342
そういえばMVVMの次はMVUだなんて言ってたけど最近あまり聞かないな
MVVMは割と出来の良いToolkitがやっと出てきて若干作りやすくなった
0346デフォルトの名無しさん
垢版 |
2024/02/08(木) 22:56:08.56ID:yILQX4Ph
>>341
ストアアプリの後継のUWPが開発者に不評でwindowsの先進機能を利用できる唯一のwinRT APIが宙に浮いてた
Win32やWPFやWinFormsからストレートに利用できない

んで別れてしまった物をつなごうとリユニオンと言うプロジェクトが始まって相互利用しやすい状況を作りましょうということに
今はそれが名前を変えてWindows App SDKと言う巨大なSDKの枠組みになった
でも皆が思ったものとはかなり違うものなんじゃないかと

その一方でネイティブからもいろいろ先進GUIを利用しやすいようにとWinUI3と言う新フレームワークも作られた
これが非常に出来が悪いので積極的に利用しづらい状態

生殺し

MVVMは原理主義者が減ったように見える
UWPの時点でMSのサンプルやスケルトンもMVVMは意識されてないものが多かったし
MVVMのフレームワークもMS外に出された
0347デフォルトの名無しさん
垢版 |
2024/02/08(木) 23:24:09.69ID:m2dEY1pn
>>343
一週掛けて遂にバラメーターで変更だけで済む方法を発見しました!より
汚いコードを大量生産する方が評価されるようなプロジェクトは辛いよ
0350デフォルトの名無しさん
垢版 |
2024/02/09(金) 00:21:37.56ID:VlbqHkkF
winformsでいいじゃん派だったけどwinforms製のService Bus Explorerってツール使ってみて、これはダセぇと思った
やっぱwinformsあかんわ
electron製のStorage Explorerと比較してデザイン雲泥の差
0351デフォルトの名無しさん
垢版 |
2024/02/09(金) 00:26:25.62ID:pMWpEfHO
いつまでたってもMVVMが流行らないのはそれ自体というよりXAMLの難解さが原因だと思う
あとはReactivePropertyとかPrismあたり使いだすと更に必要な知識が増えるし
まともにMVVM出来るようになるまでの敷居が高杉
0352341
垢版 |
2024/02/09(金) 01:29:38.70ID:A61gB+sy
みなさんリプ感謝
どうも相変わらず決定打の選択肢が存在しない状況みたいですね。

先日経済ニュースでMSの一番の稼ぎ頭はAzure関連になってるって聞いたから、
もうデスクトップにはあまり投資する気がないのかもしれないですね
0355デフォルトの名無しさん
垢版 |
2024/02/09(金) 16:16:42.24ID:GaqK7h15
>>343
もちろんステップ数が多ければいいって訳じゃないけども、
変化があったら何か理由があって修正したはずってのを管理したいだけなのです
0358デフォルトの名無しさん
垢版 |
2024/02/10(土) 01:51:05.15ID:ghsIMPAY
>>351
CommunityToolkit.Mvvm(旧Microsoft.Toolkit.Mvvm)がもっと早く出ていればな
Prismは必要以上に肥大化して複雑になり過ぎた
0359デフォルトの名無しさん
垢版 |
2024/02/10(土) 12:18:18.76ID:siL8f8mn
何がしたいのかいまいちわからないけどワークスペースのライン数数えたいなら今はcloc一択じゃないかな
0360デフォルトの名無しさん
垢版 |
2024/02/15(木) 23:48:07.50ID:sIh+C39m
1.5は大型アップデートのようだな
開発体制変更でだいぶ変わったんだろうか
レスを投稿する


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