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/04/26(水) 17:13:38.30ID:h+C0DrIA
https://mevius.5ch.net/test/read.cgi/gamedev/1680141201/
MAUI君発見される
315デフォルトの名無しさん
垢版 |
2023/05/01(月) 20:56:27.77ID:kCwS8NPD
WPFの画面を印刷したくてスクリーンショットとってpng形式で保存->MSPAINTで
印刷、という風にやってたけど、XAML直で簡単に印刷できるのな。
今日知ったわ。
2023/05/01(月) 21:37:40.82ID:QhhqW7ol
それが売りだったからなー
317デフォルトの名無しさん
垢版 |
2023/05/02(火) 07:15:51.42ID:KE+nSfQy
ペーパーレスとは言えまだ必要だしバッチリ綺麗に印刷できると気持ちいいw
318デフォルトの名無しさん
垢版 |
2023/05/02(火) 22:23:26.15ID:sWm6w+Yt
>>315
どうやるのか教えてほしいっす
319デフォルトの名無しさん
垢版 |
2023/05/03(水) 07:52:20.02ID:MYtDffGH
どこかのサイトみてやったんだがわからんな。
ソースは職場なんで明けだな。
320デフォルトの名無しさん
垢版 |
2023/05/04(木) 20:07:06.46ID:OWBNkYFc
帳票だったらEXCELでテンプレート作ってClosedXMLでやっちゃうのが
お手軽ではある。
セルの設定しておけば数値放り込むだけで後は勝手に処理してくれるし。
2023/05/05(金) 08:59:37.87ID:w8DBsTJT
いま総理は国外逃亡中だろ。
まじ意味不明
2023/05/05(金) 09:58:20.39ID:VDYHFDsH
Excelで印刷というのがありえない
2023/05/05(金) 11:03:07.11ID:6aT9WaSX
ドラッグ&ドロップの質問です。

<ListView AllowDrop="True" DragOver="listView_DragOver" Drop="listView_Drop" ...

WPFだとエクスプローラーでも別のファイラーアプリでもEverythingでももちろんできます。

まったく同じことをWinUI3だとエクスプローラーでも別のファイラーでもできるけど、
Everythingではイベントが起きずできません。

どこか間違ってる?変更されてる?
どうにかできる方法ありますか?
2023/05/05(金) 13:40:45.29ID:+H0gkw8G
解決方法は知らんが権限周りかな
Everythingをサービスとしてや管理者として実行してないか
2023/05/05(金) 17:05:38.58ID:6aT9WaSX
>>324
サービス、管理者として実行だとD&D不可、
通常実行だと可でした。

自分用なのでEverything側で凌ぐことにします。

ありがとうございました!
326デフォルトの名無しさん
垢版 |
2023/05/08(月) 19:33:50.78ID:eTiXLebz
XAML印刷

// 印刷にあたり調整 <Grid x:Name="G1" Background="#FFE5E5E5">
var tfg = new TransformGroup();
tfg.Children.Add(new ScaleTransform(0.65,0.65)); //65%
tfg.Children.Add(new TranslateTransform(30, 20)); // 左にボタンがあるので
それを印刷させないため移動

G1.RenderTransform = tfg;

PrintDialog printDialog = new PrintDialog();

printDialog.PrintTicket.PageOrientation=System.Printing.PageOrientation.Land
scape;
printDialog.PrintTicket.PageMediaSize = new System.Printing.
PageMediaSize(System.Printing.PageMediaSizeName.ISOA4);
printDialog.PrintVisual(G1, "test");

// 元の大きさへ
var tfg2 = new TransformGroup();
tfg2.Children.Add(new ScaleTransform(1.00,1.0)); //100%
tfg2.Children.Add(new TranslateTransform(0, 0));//元の位置へ
G1.RenderTransform = tfg2;
327デフォルトの名無しさん
垢版 |
2023/05/08(月) 19:37:33.91ID:eTiXLebz
>>322
結構便利だよ。
セルさえ変わらなければ自由に変えられるし。
closed XMLはEXCELがインストールされてるのが前提だが。
328デフォルトの名無しさん
垢版 |
2023/05/08(月) 22:37:54.46ID:3zTSAd/T
便乗質問お願いします。
Win10だと下記でプリンタ選択できたのですがWin11だとできません。
どうすればよいでしょうか?

var printerName = "プリンタ名";
var printDialog = new PrintDialog();
var lps = new LocalPrintServer();
var printQue = lps.GetPrintQueues().Where(x => x.Name == printerName).FirstOrDefault();
if (printQue != null) printDialog.PrintQueue = printQue;
printDialog.ShowDialog();
329デフォルトの名無しさん
垢版 |
2023/05/09(火) 06:57:43.46ID:oR/IazVW
プリンタ名あってるか。
2023/05/09(火) 09:10:37.31ID:D2jsvnik
"ワイのプリンタ"
2023/05/09(火) 10:57:03.67ID:YTbu4xRN
もちろん合ってますよ
lps.GetPrintQueue(printerName)でもいいんですが無いと例外出るので回しています
ちなみにShowDialogの前にprintDialog.PrintQueue.Name 見るとちゃんと変わっています
環境は.NET Framework4.8
Win11の使いにくいダイアログです
2023/05/09(火) 11:53:29.92ID:k/H+QMeH
選択できませんって具体的にどういうこと?
自分は分かってても他人はそれだけでは状況を正確に捉えられないよ
2023/05/09(火) 12:08:27.85ID:YTbu4xRN
印刷ダイアログを開いた時点で
ダイアログ内で選択されている出力プリンタを変更出来ません
Win11では常に「通常使用するプリンタ」が選択されています
開いた後に変更は出来ます
Win10では変更できます
動画じゃないと理解していただけないでしょうか?
2023/05/09(火) 12:12:41.95ID:LwvaBWbi
日本語がちゃんと書けないなら動画の方がいいかもね
2023/05/09(火) 12:22:25.00ID:YTbu4xRN
はぁ
ただの嫌味なんで動画は上げません
2023/05/09(火) 12:49:06.16ID:vlSDegU5
>>333
印刷ダイアログ表示時に初期選択されているプリンタをコードで設定しようとしてるのに
Windows11ではそれが無視されてシステム既定のプリンタが初期選択された状態でダイアログが表示されてしまう
という解釈でいいのかな?
2023/05/09(火) 13:09:10.74ID:LwvaBWbi
>>335
要らん要らん
あげなくていいよ
ほら他の人がイミフって言ってるから答えなよ
2023/05/09(火) 15:41:13.56ID:fHFGuVZX
>>336
そうです
Windows11 22H2の「Win32アプリケーションから印刷しています」ダイアログで事前にプリンタを変更できません。
339332 336
垢版 |
2023/05/09(火) 18:26:02.30ID:EfOvDufh
>>338
11は手元にないからざっと調べるだけ調べてみたけど新しい印刷ダイアログは曲者らしいね
ただ見つかるのはレジストリいじって従来のに戻す方法に関する情報ばっかりで
プログラムから操作する際の注意点なんかは見当たらず
同じ問題に遭遇して解決した人の目に留まればいいんだけど
2023/05/09(火) 18:27:44.52ID:K+hXzBCZ
留まったけど教えてやるメリットを感じない
341デフォルトの名無しさん
垢版 |
2023/05/09(火) 19:21:57.74ID:oR/IazVW
そりゃそうだろ。教えて自分に何のメリットもない。
親切心で書くくらいだ。
2023/05/09(火) 19:26:29.22ID:K+hXzBCZ
質問しながら嫌味を書くやつだからなぁ
343デフォルトの名無しさん
垢版 |
2023/05/09(火) 20:23:43.53ID:D8tEecOC
>>342
一石二鳥やないか
344デフォルトの名無しさん
垢版 |
2023/05/09(火) 20:25:08.84ID:oR/IazVW
OSの違いだけで動作不良なら仕様外の動作してるんだろ。
あとLINQはバグの元だ。
345デフォルトの名無しさん
垢版 |
2023/05/09(火) 21:24:01.40ID:oR/IazVW
https://www.winhelponline.com/blog/restore-legacy-print-dialog-windows-11/
346デフォルトの名無しさん
垢版 |
2023/05/09(火) 21:25:33.34ID:oR/IazVW
reg add "HKCU\Software\Microsoft\Print\UnifiedPrintDialog" /v "PreferLegacyPrintDialog" /d 1 /t REG_DWORD /f
これとかね。
2023/05/10(水) 07:40:52.97ID:zXoG8uKj
https://github.com/dotnet/wpf/discussions/7788
やる気ないからほぼ何も変わってねぇ
2023/05/10(水) 07:45:21.01ID:zXoG8uKj
https://www.youtube.com/live/cNfINi5CNbY?feature=share
さぁ、待機の時間だよ
Dart 3
Flutter 3.10
2023/05/10(水) 12:27:48.18ID:ihVK8fAX
>>344
この場合、仕様外の動作って何を指してるん?
2023/05/10(水) 12:40:53.83ID:qs6QvCEc
LINQはバグの元とか言っちゃうあたりお察し
後から従来のダイアログを使う方法を出してきたあたり、適当なこと言ったって自覚はあるのだろう
2023/05/10(水) 15:57:17.52ID:tAwBKs0U
>>347
WPFは枯れた技術という事じゃね?
2023/05/10(水) 17:23:21.83ID:m/tthB0D
もう枯れっ枯れよ
2023/05/10(水) 22:22:46.25ID:zXoG8uKj
this feature may not make it in time for .NET 8 (possibly .NET 9)
Win11Themeのこれよ
.NET 8に間に合わないかも?
354デフォルトの名無しさん
垢版 |
2023/05/11(木) 00:11:44.16ID:KBR636WS
>>348
Dart 3たいしたものないな・・・
2023/05/11(木) 00:54:19.67ID:8SO9KQ3l
Dartの言語機能よりFlutterのwasmやマルチウィンドウへの対応の方が気になる
Impellerとかほんと迷惑だよな
apple向けのjankを取り除くためだけに無駄な労力がかかってるし
2023/05/11(木) 12:51:11.44ID:2/EQwNdd
米国年収では、Ruby がGo/Rust/Elixirの3強を超えた!
PHP, Dart は、高卒の茶髪ギャルがやるイメージ

Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7

多くの言語 : 6.5〜7

PHP : 5
Dart : 4.4
2023/05/11(木) 23:47:08.87ID:Q1P2sT3q
>>326
アリが㌧
358デフォルトの名無しさん
垢版 |
2023/05/14(日) 07:28:02.53ID:Z9t5AO6q
CANVASに決め打ちで位置指定できればいいんだけど。そんなツールないかね。
印刷して位置確認してまた修正してまた印刷。プリンタ間の往復。
2023/05/14(日) 11:48:30.69ID:O9KLOqkG
flutter 3.10ガッカリ
360デフォルトの名無しさん
垢版 |
2023/05/14(日) 19:44:57.32ID:i9/qYKmG
最近WPF始めたけど
これUI作成楽だしバインドも簡単でいいね
C#コード書くより簡単で分かりやすい
2023/05/14(日) 19:59:11.83ID:MlTTbBuH
珍しいやつだなお前
普通はxamlに殺意湧くもんだと思ってたけど
それはこれからか
2023/05/14(日) 20:01:53.02ID:gjxwqavB
mauiだぞ
363デフォルトの名無しさん
垢版 |
2023/05/14(日) 20:18:07.91ID:9JCMYqC6
>>361
HTMLやってたんじゃね。
2023/05/14(日) 22:10:39.64ID:akRvJfoN
FormsからならXAMLは天国だなあ
365デフォルトの名無しさん
垢版 |
2023/05/15(月) 06:52:52.99ID:3w+UV2De
>>361
XAMLのほうがコード量が明らかに減ったから
変更が簡単で楽だと感じた
MVVMをガチガチに守ろうとすると面倒なことが多いけど
366デフォルトの名無しさん
垢版 |
2023/05/15(月) 07:37:26.45ID:RajzSWfQ
MVVMやってる人いるんだw
2023/05/15(月) 12:07:27.74ID:VtI330xM
コードビハインドとMVVM以外に何か選択肢あるの?
2023/05/15(月) 12:35:07.78ID:wS5FtXi0
V.VMというかV.M
でやってます
369デフォルトの名無しさん
垢版 |
2023/05/15(月) 19:42:06.89ID:RajzSWfQ
MVVM使うほどのアプリ作ってないしなぁ。

CANVASで帳票印刷してるんだがwindow作ってそれのコンテンツプロパティに
CANVAS指定でプレビューできんのな。
しかも使用してるモニタが93DPIなんでほぼ原寸で出てた。感動したわ。
2023/05/15(月) 20:42:41.83ID:WX+SovFb
>>369
そういうときコードビハインドでやってるの?
それとも>>368みたいな感じ?
371デフォルトの名無しさん
垢版 |
2023/05/15(月) 22:09:33.99ID:RajzSWfQ
分からないという事もあり、アンチMVVM!
2023/05/15(月) 22:35:33.78ID:0oc4REo8
そもそもバインドするデータが無い
という場合はどうしょうもないな
2023/05/16(火) 08:12:50.00ID:scMhFUkR
Canvasって、ViewModelとChildrenバインドできたっけ?
XamlからItemSource、ItemTemplate使ってもうまくいかなかったような・・・
仕方なくコードビハインドでやった記憶がある。
2023/05/16(火) 09:49:54.49ID:202gI0ra
そういうときはサービスクラスを作ってカプセル化してVからVMにインジェクションする
って、書いただけじゃ伝わらないよな
2023/05/16(火) 16:18:50.60ID:/dwC7JTn
>>374
もうちょっと具体的に紹介してよ
376デフォルトの名無しさん
垢版 |
2023/05/16(火) 18:01:09.06ID:4Qe65khc
MとかVMとか、なんか、いろいろ難しそうなことやってんだな。。
2023/05/16(火) 19:51:15.02ID:n3YZZSHv
データグリッドの値をいじったりするのは
データバインドしなきゃやっとれんでしょ
378デフォルトの名無しさん
垢版 |
2023/05/16(火) 20:00:54.76ID:4Qe65khc
そんなことはあるまい。
379デフォルトの名無しさん
垢版 |
2023/05/16(火) 20:07:59.79ID:MBYEcVuB
MVVMっぽい何かはしてるけど
たいした物つくらないから時間の無駄な気がしてならない
2023/05/16(火) 20:46:43.78ID:yTYZJaUk
データグリッドをバインドなしで扱うとするとイベントハンドラでゴリゴリデータ書き換え?
381デフォルトの名無しさん
垢版 |
2023/05/16(火) 20:54:05.20ID:4Qe65khc
データグリッドの殆どがDBとかCSVからのデータ表示用だろ。入力もあるけど。
だから検索して表示した後は放置。必要があればまた全更新。
だからゴリゴリデータ書き換えって事態はないんじゃね。

しかしデータグリッド早いよな。7000件をCSVから全表示させても1秒かかるか
どうかって感じ。非同期化してたのを戻したわ。
2023/05/16(火) 21:10:29.48ID:HznneTlP
いや、データ編集ありの場合にデータバインドなしでどうやんの?って話の流れでしょ
383デフォルトの名無しさん
垢版 |
2023/05/17(水) 07:05:06.66ID:Lo59nD5D
データグリッドに手を加えてバイディングなしでやってた。
2023/05/17(水) 15:05:01.97ID:k2sfi7EW
またmっvmかよ
2023/05/17(水) 18:00:09.26ID:ELtH3TLu
なぜMVVMかって?
ドメインモデルに集約するためさ。 .Net Conf 2022でも2023でも聴講すればわかる。
>374のような、ボケスタイルはやらない。 
DIでレポジかインスタンス参照を渡すとか言ってるんだろうが、VMからV参照は双方向参照。
SOLID原則を学べ・・・ と言いたい。
386デフォルトの名無しさん
垢版 |
2023/05/17(水) 20:16:07.84ID:Lo59nD5D
さっぱりわからんわ〜。
ま、大事なのは要件が実装できかどうかだと思っている。
2023/05/17(水) 20:53:45.90ID:KKhsw4JF
>>375
1.例えばCanvasのようなUI部品をプロパティーに持ち、それをアクセスルルメソッドなどで構成されたサービスクラスを作る
2.VMでインスタンス化してプロパティーとして公開
3.VのコンストラクタでVMで公開されているサービスのインスタンスに自身のCanvasのインスタンスを挿入
4.VMからはサービスクラスを介してUI部品をメソッドを使って簡単にアクセスできるようにする
5.単体テストが必要な場合はサービスクラスのインターフェースを用意して、スタブでデバッグする

つか、WinUI3のConnectedAnimationなど、このやり方じゃないと不可能だよ
388デフォルトの名無しさん
垢版 |
2023/05/17(水) 21:01:02.55ID:Lo59nD5D
ますます分からなくなった!
2023/05/18(木) 00:26:14.80ID:M0TxVFb2
1.例えばCanvasのようなUI部品を持つMyView.xamlクラスを作る
2.VMでプロパティーとして公開
3.VのコンストラクタでVMで公開されているMyView型のプロパティに自身のthisを挿入
4.VMからはプロパティを介してUI部品に簡単にアクセスできる
5.単体テストが必要な場合はViewのインターフェースを用意して、スタブでデバッグする
390デフォルトの名無しさん
垢版 |
2023/05/18(木) 20:30:12.83ID:NmURz+IP
難しい〜
どんな凄いアプリ作ってんだ?!
391デフォルトの名無しさん
垢版 |
2023/05/18(木) 21:22:50.78ID:NmURz+IP
new FixedPage() と canvas で両面印刷はどうすんだ?
片面しかできん。
2023/05/18(木) 21:44:03.34ID:67t/SXkw
>>389
VMにVのインスタンスを注入すれば機能的には全く問題ないんだろうが
ちょっと不細工だから不採用だな

好みの問題なんだが
2023/05/18(木) 22:20:22.72ID:oHW8akGV
原則としてVMがVに直接依存するべきでないからそこに依存性逆転パターン使うわけやね
2023/05/19(金) 16:09:03.65ID:6FflI5yr
MVVMとデータバインドをごっちゃに考えてしまう
395デフォルトの名無しさん
垢版 |
2023/05/19(金) 19:27:50.45ID:FoiQio6I
MVVMの話は難しいな〜。ホンマ感心するわ。
で、new FixedPage() と canvas での両面印刷はどうするんでしょう。
こちらもお願いします。。
2023/05/19(金) 20:40:03.06ID:pCo6gpmL
今回シンプルな画面だしイベント駆動でいっかー

あれよあれよと言う間に仕様追加で画面ゴテゴテ

こんなんならデータバインドで作ってたわ・・・(いまここ)
2023/05/20(土) 05:27:38.90ID:bdMg4j0I
そもそもVMでUIElementを操作するなという事では?
DIP原則守る為としてインターフェースをVMにインジェクションしても、そのRepository経由でコンテナーのUIElement操作したら本末転倒。
とどのつまり、UIElementをコードで操作するような場合は素直にコードビハインドでやれという事。
DataGridにエクセルの操作性追加や選択範囲のデータ取得、Adonerにグラブハンドル入れてCanvasのShapeをResizableにしたり等々の処理をVMでやるとかあり得ない。
398デフォルトの名無しさん
垢版 |
2023/05/20(土) 08:57:25.79ID:B3aysABv
>>391
自己レスになるがFixedDocument() で土台作ってFixedPage()で全ページをaddして
最後にXpsDocumentWriterで一気にプリンタにデータ送って両面印刷できた。
プリンタダイアログの設定で袋とじとか自動的にその通りに印刷された。楽だなこれ。
2023/05/20(土) 09:00:00.77ID:mmZhl8HV
>そもそもVMでUIElementを操作するなという事では?
>DIP原則守る為としてインターフェースをVMにインジェクションしても、そのRepository経由でコンテナーのUIElement操作したら本末転倒。

本末転倒ってのはどういうところが?
UIElement へ直接依存することが問題だしそれを切り離せればとりあえず問題はないと思うが。
2023/05/20(土) 10:26:20.92ID:hKeHfHFy
分かってると思うけど >>389 は皮肉だぞ
2023/05/20(土) 16:23:18.29ID:mmZhl8HV
>>389 に問題があるのは当然として >>397 はそれを依存性逆転で改善したうえでの話と思ったが。
2023/05/20(土) 16:42:27.96ID:MBF+Fo/f
>>389は一応動くから、ちょっとやばいけど使っている人がいても不思議じゃないと思ったわ
>>387のやり方で何も問題なく見えるが>>400の方は何が気に食わなかったのやら
403デフォルトの名無しさん
垢版 |
2023/05/21(日) 06:10:54.88ID:Elr5wk/3
マルチスレッドや印刷、GDI、ソケット、、そういう事が出来る奴の方が頼もしいわ。
結局誰も>>391の質問に答えられないし、プログラマの勉強に終わりは無いな。
2023/05/21(日) 09:44:52.17ID:WLjUQB8s
質問の意味が分からんからな
裏写りを表現したいということかな?
405デフォルトの名無しさん
垢版 |
2023/05/21(日) 10:05:20.77ID:Elr5wk/3
>>397
とかどうやって勉強したんだ。本?
2023/05/21(日) 12:36:49.38ID:VUm7ancq
>>403
>結局誰も>>391の質問に答えられないし
ChatGPTに聞けば答えてくれるよ
ほんと便利な時代になったもんだね

DocumentViewerとDocumentPaginatorを使ってCanvasをPagenationできるようにする
もしくは
自分でページサイズに合わせてcanvas内の要素を複数のcanvasに分割して各FixedPageに割り当てる
FixedDocumentのPageContentとして各FixedPageを追加
2023/05/21(日) 18:52:32.73ID:CTJ8pTH5
>>405
POS開発と、CodeProjectと.NET Conf現地参加・・・ ITギークナカーマ一杯。
基板開発とクリーンアーキエンベッディドもやってるよ。
ESP32の広大なFLASH空間に満足しています。
408デフォルトの名無しさん
垢版 |
2023/05/21(日) 19:56:08.47ID:Elr5wk/3
組み込み系か。c言語で?
POSにしてもMVVMとは無関係ぽいが。
409デフォルトの名無しさん
垢版 |
2023/05/21(日) 21:25:54.24ID:2oe1bdCf
POSめちゃ関係あるやろ
業務系のなかでもぎゅうぎゅうに詰め込んだUIの典型
410デフォルトの名無しさん
垢版 |
2023/05/22(月) 07:28:05.97ID:B1W7qz7E
UIが多い == MVVMなのかい。
2023/05/22(月) 10:40:27.78ID:G50scNn0
UIが小規模でシンプルならMVVMにする利点が少ないのは確か
2023/05/22(月) 12:26:52.57ID:ELDsg2JM
MVVM面倒くさすぎるんじゃ
413デフォルトの名無しさん
垢版 |
2023/05/22(月) 19:02:59.28ID:B1W7qz7E
picだったな。メモリ少なくてアセンブリ使ってた。
MVVMは少数派。これ持論。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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