WPF(.NET4.x, .NET Core) GUIプログラミング Part23

■ このスレッドは過去ログ倉庫に格納されています
2019/05/16(木) 07:52:32.39ID:8fOYIMEO
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part22
https://mevius.5ch.net/test/read.cgi/tech/1513175747/

関連スレ
Windows 10 UWPアプリ開発 Part 2
http://mevius.2ch.net/test/read.cgi/tech/1499658092/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
2019/08/24(土) 01:01:56.33ID:XU4s8+HQ
Javaで構築するの止めてC#にする場合が増えてるらしい
2019/08/24(土) 01:32:43.24ID:owWGC5JM
>>570
ソースは?
2019/08/24(土) 07:26:16.85ID:+PLwcW2w
.cs
2019/08/24(土) 10:39:20.73ID:hVEgod3x
>>572
座布団2枚あげましょう
2019/08/24(土) 12:01:56.85ID:2Z6Elg7N
そりゃ拡張子じゃないかーい
って言うボケかと思ったのに…
2019/08/24(土) 12:52:53.99ID:hVEgod3x
>>574
あんたセンス無いね
2019/08/24(土) 14:13:27.89ID:ppiGm2HF
トンキン人さむ〜
2019/08/24(土) 17:40:03.15ID:+T5zNNSA
ぐぬぬ
2019/08/26(月) 07:18:34.37ID:CVu8g0Lv
関西人の理想的なボケ↓
2019/08/26(月) 08:57:33.58ID:4t0YYyeR
WPFはオワコン。
580デフォルトの名無しさん
垢版 |
2019/08/26(月) 17:45:31.71ID:dI1F1hPt
普及させたいなら
Forms廃止して社内開発リソースをWPFに集中させるから
頑張って移行してね!
ってやればいいのに。
んでForms無くすならVB.NETも切っていいし
2019/08/26(月) 18:00:49.98ID:/h3P8awM
>>580
それに近いことをやろうとしたのがUWP
2019/08/26(月) 19:05:57.08ID:Ucxa8lVF
で、その開発予算は天から降って来るのか?
2019/08/26(月) 20:46:52.41ID:5hrkIwVX
WPFは既存の技術すべて置き換えるために作られたはずだけど
実際はそこまでのスケールじゃなかった

HTML VB6 winforms MFC
全部生き残ってしまった
2019/08/26(月) 20:49:41.98ID:01TaglzE
XAMLがわかりにくいから置き換わるわけがない
2019/08/26(月) 21:12:48.53ID:FQM1aXM6
XAMLそのものはそこまでわかりにくくないだろ
ややこしいのはMVVM
2019/08/26(月) 21:25:24.89ID:wSbsYOJ/
WPFはライブラリの出来は良かったのにGUI周りの出来が悪かったのが痛かったな。
あまりに貧相であれじゃ客が納得しない。
2019/08/26(月) 21:26:09.78ID:01TaglzE
あなたのような優秀な方には簡単かもしれませんが、
わたしのような底辺にはわかりにくいのです
つまり広まりません
2019/08/26(月) 21:33:06.34ID:5hrkIwVX
>>586
何のことを言ってるかわからないけどWPFは半端だったのでいろんな機能をwinformsに頼らざるを得なかった
winformsを置き換えるものとしては実装が不足してる
2019/08/26(月) 22:10:15.41ID:/h3P8awM
>>586
WPFのコアな部分はレガシーなウィンドウシステムを捨てて再設計するんだってそれなりに気合い入れて作られてると思う。
だけど色々出来る分複雑になってるのに、それをラップしてユーザーがお仕着せで良いから楽に使えるようにする支援ライブラリ的なものが足りな過ぎたね。
標準のコントロールもFormにあるのは一通り押さえておけば、MVVM抜きならそれなりに簡単に使えるのに。
2019/08/26(月) 22:12:50.23ID:ij5Jd0yF
XAMLでわかりにくいならhtml&cssのデザインは地獄だろうな
XAMLがいかに親切か実感できるぞ
タグで囲むデザインはもう飽きたからもっとシンプルにしてほしいけど
JsonかYAMLで
2019/08/26(月) 22:15:26.16ID:qess7VlR
WPFデザインってWin7のLunaテーマのイメージ
2019/08/26(月) 22:16:18.43ID:qess7VlR
LunaじゃなくてAeroだった
2019/08/26(月) 22:22:45.61ID:VVV12Px/
>>591
WPF標準でも一応GUIのテーマが用意されてるけど、LunaやAeroで止ってる…
正にVistaか7の時代
594デフォルトの名無しさん
垢版 |
2019/08/26(月) 22:29:08.48ID:Wx9nEB+f
>>589
ほんこれ
気合いの入れ方が中途半端すぎ
2019/08/26(月) 23:04:10.96ID:MCFEqLYy
一度に全部学ばないといけないからだろ。xaml,データバインディング,MVVMと。最初俺も死にかけたわ。

androidやりはじめたときはレイアウトファイルのxmlくらいだったから敷居は低かった。で、随分後にandroidもデータバインディングに標準対応して、順番にゆっくり学べるからな。
2019/08/26(月) 23:17:19.25ID:MCFEqLYy
かたや、WPFは一度挫折した後に作戦変えて最初はデータバインディングとかMVVMとか無視してアプリ作ってみようとしたが、ListViewとかItemsControl系はアイテムテンプレート使わねぇと仮想化できないし、
やっぱデータバインディングとかすぐに学ぶはめになったし。
2019/08/26(月) 23:27:56.52ID:GeaqRBlJ
データバインディング便利でいいじゃん。
表示とロジックを分離できて見通しがいい。
2019/08/26(月) 23:32:49.32ID:CfenbB74
MVVM便利すぎてWinFormsでもMVVM使ってしまう体になってしまったよ
599デフォルトの名無しさん
垢版 |
2019/08/26(月) 23:37:29.50ID:Wx9nEB+f
わかるわー、
MVVM慣れるとレガシーは面倒すぎる
2019/08/26(月) 23:49:45.08ID:MCFEqLYy
というより、MVVM学ぶ前は、ソフトウェアアーキテクチャ?みたいの意識しないで適当につくってたから今になってMVVM以外で作ろうとすると困りそう
601デフォルトの名無しさん
垢版 |
2019/08/26(月) 23:56:16.79ID:Wx9nEB+f
あんた自分が勉強嫌いなだけじゃん
MVVM以前にもMVCやらデザインパターンやら
意識しないといけないものはいくらでもあったでしょう
2019/08/27(火) 00:37:24.80ID:7s1l/ptn
じゃ、おまえVB6やWinForms自体にで何か意識して作ってた?
2019/08/27(火) 00:38:56.97ID:7s1l/ptn
VB6やwinforms時代にどんなパターン採用してたの?
2019/08/27(火) 00:43:54.63ID:Wpw9BTQZ
DOC-View も MVCもWinForm以前からあるんだが?

個人的問題ならマ板でしろや
2019/08/27(火) 00:53:36.96ID:7s1l/ptn
存在ぐらいはMVVM学んだら学ぶだろ。あほかよ。
2019/08/27(火) 03:48:51.51ID:cPN8HTkT
MVP
2019/08/27(火) 05:34:30.66ID:3C/EiBc0
早く.NETでWin32を完全にリプレイスできるように
ならないな、はあ。
2019/08/27(火) 19:04:49.63ID:bW2ePtKS
無理だろ
windowsとは何かと言えばwin32のAPI群とそれで作られたコンポーネントとサービスの塊だから
2019/08/27(火) 19:28:50.81ID:NopeFxN7
MVVMのライブラリーがMSから出てない事を知って真面目に取り組むのを止めた
2019/08/27(火) 19:46:08.12ID:4WMOl80S
MSは今間違いなく迷走しているよね
BGM:バッドボーイブルース
2019/08/27(火) 22:38:41.78ID:St7bRLq6
>>610
×今
○ここ10年くらい
2019/08/29(木) 08:24:36.72ID:Z2N7sLLL
OSS上がりはほんとテストしない。自己満足でドヤ顔で公開して放置。
2019/08/29(木) 19:55:13.55ID:dwig1eJB
思い付いたアイディアコーティングして形になったらそれで興味は失せてしまう
品質とか興味無い
2019/08/30(金) 03:54:01.72ID:iF4ecVgg
>>610 >>611
githubとかVSCodeのようなここ10年にない好調な分野で
WPFの失敗を取り返した
2019/08/30(金) 15:32:23.77ID:ERkIjfvr
>>607
もし奇跡が起きて.NET5が大成功したら、多くの.NETアプリはWebアプリとしてクラウド上のLinuxでホストされるようになり、
デスクトップのWindowsが単なるシンクライアントに成り下がる未来は来るかもしれない
万一そうなりそうだったら、MSは.NETを事実上Azureでしか使えなくするような縛りを入れてくるだろうけど
2019/08/30(金) 16:47:02.85ID:GA3Qy85O
.NET5って、選択枝がそれだけという事だろ? 失敗なんてあるの?
2019/08/30(金) 17:50:33.12ID:Ervdw2Vp
Blazorが天下を取るのは目に見えてるからなぁ
業務系は全部これでおk
2019/08/30(金) 18:17:06.08ID:ERkIjfvr
>>616
.NET5が普及することが必ずしも.NET5の成功を意味するとは限らない
みんながVSCodeやRiderでC#を書いて、AWS上のLinuxサーバーで運用するようになったら、MSから見れば大失敗だ
そうなれば当然MSは.NET5を放棄することになるだろう
MSにとって利益になる形での普及が成功の条件となると、なかなか難しいよ
2019/08/30(金) 22:01:53.87ID:VcfE35DU
放棄ってどうするのさ
態々くっつけたのをまた分割するのか?
2019/08/30(金) 23:03:11.02ID:uONjY6PZ
>.NET5が普及することが必ずしも.NET5の成功を意味するとは限らない

.NET5の成功だろ
言いたいのはMSの成功を意味するとは限らないだろ
2019/08/30(金) 23:15:11.32ID:daE1ezev
OSSとはいえ特許があるから、MSが.NET Foundationから手を引いたら現実には開発の継続は不可能だよ
もちろん、MSは当然そんな最悪の結果にならないように技術面や政治面でコントロールするだろう
仮にそのコントロールが普及を妨げる性質のものであったとしてもね
2019/08/31(土) 00:01:51.67ID:8S6g8PTE
>>614
アプリケーションフレームワークとツールの類を同列に語っても意味無い
2019/08/31(土) 00:21:51.42ID:zHC92gqD
>>621
ちょっと何言ってるかよくわからない
2019/08/31(土) 00:39:06.27ID:jKcP7puA
>>614
GitHubはただ買収しただけだし
そもそもgitはライナスの作ったものだし…

vscodeはGitHubがatomエディタ作るために作ったエレクトロンに乗っかってるだけだし
MSはあまり貢献してない
2019/08/31(土) 00:59:08.53ID:AytMhKL2
>>624
AtomとVSCodeじゃElectron部分以外ソースほぼ別物だしMSはあまり貢献してないって暴論すぎる
2019/08/31(土) 01:12:59.59ID:UM0UH3ls
GitHubのプライベート数無制限もMSマネー後だしな
評価すべきところはちゃんとしなきゃね


とはいえモダンなGUIに追従できるポジションのフレームワークが
悉く壊滅し続けている惨状を埋め合わせるものではない、というか関係ない
2019/08/31(土) 06:44:41.35ID:+09iQaTY
モダンすぎるBlazor大成功確実
2019/08/31(土) 08:19:57.96ID:BTqmdo6K
blazorってviewあたりはどうなってる?reactととかならmaterialやら色んなデザインのが今や豊富にあるけど。
2019/08/31(土) 08:32:47.45ID:BTqmdo6K
dartとflutterはhammingbirdでwebのフロントエンドに進出だし、desktop embeddingでデスクトップも。dartは現状クソだからmicrosoftさんには頑張ってもらいたい
2019/08/31(土) 09:29:29.38ID:DOQSWUJb
blazor触ったこと無いんだけどwebアプリってことはローカルファイルの操作とかは難しかったりすんの?
開発補助ツールとか作ったりすんだけど、そういうのはやっぱデスクトップアプリのほうが向いてるよね?
そういうのもblazorでできるならちょっと触ってみようかなって思うんだけど
2019/08/31(土) 10:15:11.61ID:AytMhKL2
>>630
なにができないかはWebAssemblyの制約に規定されるのでは?
俺もBlazor触ったことないけど
2019/08/31(土) 10:27:14.18ID:OiY9nyzL
今はviewはRazorのままだな。WPFをcanvasとwebglでエミュレートするとかできたらいいのに。
633デフォルトの名無しさん
垢版 |
2019/08/31(土) 18:02:22.42ID:Yn5v13ie
BlazorっていえばWebAssemblyだと思い込んでたけどサーバーサイドがあるのか
やば、乗り遅れてるわ
https://blog.okazuki.jp/entry/2019/06/11/135621
2019/09/05(木) 06:45:37.44ID:Sa2Ng6Af
祝WinUI 2.2
TabView!!
635デフォルトの名無しさん
垢版 |
2019/09/10(火) 23:16:19.51ID:wxmv+p95
WPF+XamlIslandでUWPのコントロールを使うとき
スタイルをどうやって設定するかご存じの方いますか?
WPFプロジェクトだとUWPのXAML書けないです…
2019/09/19(木) 23:16:30.45ID:o/5TVM4E
ちょっと古い質問かもしれないんですが、WPFのプロジェクトを新規作成して Prism.WPF、Prism.Core、Prism.Unityをヌゲットで適用したんだけど Microsoft.Expressions.Interaction が参照に入らないのです
やりたいことは Xaml で ei:PropertyChangedActtion を使って View の Xaml だけで他のコントロールのプロパティを変えたい(ElementNameとTargetPropatyとかでできた記憶があります)だけなんですが、これはどこにいったんでしょうか。
2019/09/19(木) 23:20:27.73ID:o/5TVM4E
補足です。当時はヌゲットがなかったから Expression.Blend とかをインストールして参照設定の拡張アセンブリから選んで使ってたと思います
2019/09/20(金) 01:12:36.63ID:HDCFOJen
>>636
Blend SDKは廃止?方向みたいで、Xaml Behaviors for WPFがそれの代わり。
そのパッケージをnugetで追加して、xmlns:i=〜やxmlns:ei:=〜ってあった所は、
xmlns:i="http://schemas.microsoft.com/xaml/behaviors";に直せば前と同じに使える。
2019/09/22(日) 22:53:58.06ID:4iZ0rcTF
>>638
名前が変わったんですね
ありがとうございますやってみます
2019/09/26(木) 17:08:59.96ID:RqohR87j
MediaElementなどを実装したUserControlを
MainWindowでItemsContrlを使用し複数表示しました。
その中の1つが選択されたときWindowいっぱいに広げたいのですがどうすればできますか?
ViewModel側で選択されたUserControlは取得できています。
641デフォルトの名無しさん
垢版 |
2019/09/27(金) 00:31:03.92ID:zANlzt+z
>>640
UserControl(View)をViewModelから参照するのはMVVMに反してるからオススメしない。
ItemsControのSelectedItemプロパティと選択中のViewModelとがバインディングできてるなら、
選択後にViewModelで全画面表示用のプロパティに値を設定すれば良い。
そのプロパティ値が変化したときにどうやってUserControlを全画面表示するかは、純粋にView(XAML)の問題だ。
2019/09/27(金) 12:08:12.14ID:u+iGcBJm
>>641
やはりViewModelでUserControlを参照するのはマズいですよね。
プレイヤなので再生中の状態がそのままコピーされるとよいのですが。

全画面用のUserControlにどのプロパティを設ければよいでしょうか?
動画パスや再生時間を渡して読込からやらせるしかないですかね?
2019/09/27(金) 23:54:36.27ID:fjlgNlFb
ItemsControl上でも再生とか停止ができて、選択したらWindowいっぱいにしたい感じ??
2019/09/28(土) 06:32:34.96ID:yTyvrKRv
>>643
そうです。
何かスマートな方法ありますかね?
2019/09/28(土) 14:31:06.45ID:7KAMFGQE
拡大されてるムービーがどれかっていうのが、アプリのロジックに関係ないならクリックのイベントハンドラで書くのでいいんじゃないかな
ItemsControlから画面いっぱいにひろげる方法は知らないんだけど、そういうパネル作るののかな?
2019/09/28(土) 18:40:27.12ID:OEfKx/qL
>>645
そうですね。
今はUserControlをItemsControlに重ねて配置してVisibiltyを切り替えています。
2019/09/28(土) 20:52:31.51ID:XPio18TJ
PrismでRegion使えばチョチョっとできないかね
2019/09/28(土) 22:58:14.58ID:RkNENkKq
再生中の動画が流れたままシームレスにWindow全体に表示というのは厄介そう
2019/09/28(土) 23:32:48.35ID:dmYXSMEs
UWPならMediaElementにIsFullWindowってプロパティーがあって問答無用でフルスクリーン表示にできる
あと、ConectedAnimationつかえるんだがな
2019/09/29(日) 00:34:01.71ID:sW5PihO+
XAML Islandで解決じゃん
2019/09/30(月) 09:25:36.75ID:EF3Cb7k3
>>649
>>650
ありがとうございます。

XAML IslandでUWPのMediaElementを実装してみます。
2019/10/01(火) 00:37:23.82ID:YMHfANdP
おー上手くいったかどうか教えてくれると嬉しいな
2019/10/01(火) 08:56:41.44ID:58CauEY5
UWPのはウィンドウいっぱいというより、全画面表示だけど大丈夫かな?
2019/10/02(水) 21:41:52.01ID:akptwudD
>>653
やはりそうなの?
調べたらそれっぽいこと書いてあった

Microsoft.Toolkit.Wpf.UI.ControlsのMediaPlayerElementを使ってみたのだが
Sourceにバインドしても再生されない
Xamlに直接書くと再生されるのだが…
2019/10/09(水) 14:09:07.32ID:0y9ABYBv
.Net Core 3.0のWPFのユーザーコントロールのデータバインディングに関して質問なんですが、
MainWindow.xaml.csのコンストラクタ内でPrice=1000と代入しているのですが
TextBoxのText(Value)の値が0から変化しないのですが、どこが間違っているのかわかる方いますか?
テキストボックス内にカーソルを合わせて上下キーを押すと1ずつ増える/減るの動作は正しく動いているようです。
DecimalBox.xaml
<UserControl x:Class="test.DecimalBox" ...>
<TextBox Text="{Binding Value}" PreviewKeyDown="TextBox_PreviewKeyDown"/>
</UserControl>

DecimalBox.xaml.cs
namespace test
{
/// <summary>
/// DecimalBox.xaml の相互作用ロジック
/// </summary>
public partial class DecimalBox : UserControl
{
public DecimalBox()
{
InitializeComponent();
DataContext = this;
}
public decimal Value { get { return (decimal)GetValue(ValueProperty); } set { SetValue(ValueProperty, value); } }
public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(decimal), typeof(DecimalBox));
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Up ) Value += 1;
if (e.Key == Key.Down) Value -= 1;
}
}
}
2019/10/09(水) 14:09:33.92ID:0y9ABYBv
MainWindow.xaml
<local:DecimalBox Value="{Binding Price}"/>

MainWindow.xaml.cs
namespace test
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
Price = 1000;
}
public decimal Price
{
get { return price; }
set { price = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("PriceData")); }
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
2019/10/09(水) 14:19:23.75ID:0y9ABYBv
以下の部分コピペミスです
set { price = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("PriceData")); }

正しくはこうなってます
set { price = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Price")); }
2019/10/09(水) 14:36:41.74ID:0y9ABYBv
ちなみに、以下の部分を
MainWindow.xaml
<local:DecimalBox Value="{Binding Price}"/>

以下のようにするとTextBoxの値は1000になります
MainWindow.xaml
<local:DecimalBox Value="1000"/>
2019/10/09(水) 15:38:14.92ID:zdauYmXS
<local:DecimalBox Value="{Binding Price}"/>においてデータコンテキストは
DecimalBoxのコンストラクタで設定されてるDecimalBox自身
DecimalBoxにPriceなんてプロパティは無いのでバインディングに失敗する

ユーザコントロール自身ではなく、その直下にGridとかのパネル置いてそれのDataContextに設定するようにする
660デフォルトの名無しさん
垢版 |
2019/10/09(水) 16:14:04.43ID:0y9ABYBv
>>659
以下に変更したら動作しました。ありがとうございます。

cs側
public DecimalBox()
{
InitializeComponent();
textbox.DataContext = this;
}

xaml側
<TextBox x:Name="textbox" Text="{Binding Value}" PreviewKeyDown="TextBox_PreviewKeyDown"/>

もう一つ質問なのですが、
DataContextの設定を今はcs側でやっていますが、
これをxaml側で行うことって可能なのでしょうか?
2019/10/09(水) 16:24:35.37ID:0y9ABYBv
>>660

自己解決しました
RelativeSource FindAncestorでUserControlまで遡ればよかったみたいです。

<TextBox DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" Text="{Binding Value}" PreviewKeyDown="TextBox_PreviewKeyDown"/>
2019/10/09(水) 19:13:21.44ID:Ce1FE6BG
>>659
> DecimalBoxにPriceなんてプロパティは無いのでバインディングに失敗する
こう言う時は実行時でもいいから例外発生させるなりしてくれればいいのにね
663デフォルトの名無しさん
垢版 |
2019/10/09(水) 19:46:19.00ID:yz69DB70
Binding失敗してるとデバッグログとかにメッセージ出なかったっけ?
2019/10/09(水) 19:58:14.79ID:0fRzc22C
デバッグログに出るけど他にメッセージが多いと見落としがち
WPFにもx:Bind欲しい
2019/10/09(水) 22:00:06.20ID:TJpx/LrH
さんざん欲しいと言われてるはずなのに追加されない

なぜだろうね
2019/10/09(水) 22:05:55.57ID:bHkpFlre
.Net5なら
2019/10/09(水) 22:16:15.27ID:mYLA6NTy
ないない
なんか勘違いしてるようだが、MSがWPFをCoreに移植したのはメンテナンスをしたくないからだよ
今後.NETランタイムがアップデートされてWPFが壊れても、Coreなら開発者は自己責任で古いランタイムをずっと使い続けることができる
2019/10/09(水) 22:27:19.81ID:E53UYuwr
winformsも同じだね
2019/10/09(水) 22:43:33.90ID:yz69DB70
WPFはオープンソース化したんで何か起きるかもしれん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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