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/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はオープンソース化したんで何か起きるかもしれん
2019/10/09(水) 22:53:02.63ID:373lwcNW
メンテナンスが放棄されcannaの二の舞を
2019/10/09(水) 23:31:18.85ID:bHkpFlre
WPFは.netframework+WinUIと入れ替わる予定じゃないかな
xamlソリューションとしてはこっちのほうができが良い
2019/10/10(木) 00:05:16.71ID:/TNjFiTo
引き合いに出すのがCannaかいなw
Struts1とかのがヤバくね
2019/10/10(木) 19:08:05.52ID:U4NCIrbo
WinUIは100%C++で書かれたwindows専用API
2019/10/10(木) 20:23:18.39ID:MeoT4exf
winui 3.0で新規に書き起こすんだから今なら下位のレイヤー取り替えられるようにするんじゃねぇかな?つまり、windowsから簡単に切り離せるように。
2019/10/11(金) 19:38:07.79ID:NbTMQOfE
もともとwindowsの機能に依存したUIにすると思う
下位を汎用にすると設計が大変だから
2019/10/11(金) 20:17:33.23ID:Mh9N3tse
下位を汎用にした結果がWPFの大失敗だもんな
まあWPFが下位に抽象化レイヤを入れたのは移植性を高めることではなくて自由度を高めるためだけど、
結局出来上がったのはゲロ遅くて無駄に複雑でMSによるアップデートも遅いゴミ
WinRT以降のOS側で高レベルなUIコンポーネントを提供する戦略は少々行き過ぎてる気もするけど、
少なくとも今更WPFの黒歴史を繰り返すことはないだろう
2019/10/11(金) 23:03:08.03ID:XWYiG0pn
どういうことなの…
2019/10/12(土) 02:58:35.99ID:VvRjKpAi
下位を汎用ってもflutterだってやってることだしな。描画エンジンの部分と入力を汎用化するだけで、googleエンジニアが出来てMicrosoftのエンジニアができないとな?

もちろん、それなりの手間が発生するが。
2019/10/12(土) 03:11:46.71ID:SBuCcucL
でもデスクトップPCそのもののシェアが減ってる現状で下位を汎用化してマルチプラットフォームにする価値あるか?というと怪しい気がする
2019/10/12(土) 08:34:07.80ID:T5dO8LiA
下位に抽象化レイヤを入れたGUIフレームワークとしては既にElectronが成功を収めている
今更作る意味はないよ
2019/10/12(土) 08:37:10.78ID:VpodjE+/
みんな大失敗だよ。
2019/10/12(土) 08:44:21.47ID:VvRjKpAi
WinUIはFluent Design Systemのライブラリだし、別にタッチ専用という訳じゃないけど、クロスプラットホーム化狙うなら、まずはUWP/Android/iOSでしょうに。

WinUIはただのUIライブラリだから、プラットホーム特有のAPIも簡単に呼べるようにならんだが。
https://devblogs.microsoft.com/dotnet/introducing-net-5/
.net coreにもjava/swift interopelabilityが予定されてるし。
2019/10/12(土) 08:46:15.64ID:VvRjKpAi
Electron上げるくらいならflutterの方が有望だと思う
2019/10/12(土) 08:53:16.39ID:VvRjKpAi
まぁ、俺はflutterに乗っかりつつあるけど、Microsoftはやる気あるなら急がんと。googleのflutterへのやる気すごい。
2019/10/12(土) 10:28:41.50ID:V3SUioeZ
Blectronやろ
2019/10/12(土) 18:51:33.97ID:0Jt8rcSq
Electronを汎用と言うのは脳がいかれてると思う
2019/10/12(土) 21:11:44.74ID:fKbeXMkP
Webブラウザは明らかにPALと見做せるだろ
しかも対応するする詐欺ではなく既に各プラットフォームに実装が存在する
2019/10/13(日) 20:08:26.73ID:g3zENVi8
PAL (曖昧さ回避)

PAL方式 - アナログカラーテレビ規格
Pilot Activated Lighting - 飛行場の灯火に関するシステム
フィリピン航空のICAO航空会社コード
プログラマブルロジックデバイス (Programmable Array Logic)
年間熱負荷係数 (perimeter annual load) - 建物の省エネルギーの指標
パレスチナ自治区の旧FIFAコード
江釣子ショッピングセンター パル
2019/10/14(月) 16:48:28.52ID:WeKpLulI
>>669
オープンソース化してなんか起きたのってなんかある?WTL?
2019/10/14(月) 16:50:13.31ID:WeKpLulI
>>322
jsonと規模が違いすぎるだろ
アホすぎる
2019/10/14(月) 16:54:22.26ID:r8b52e+X
三ヶ月と半月
2019/10/14(月) 17:42:15.71ID:7niU2SoV
>>690
規模とか都合のいい条件後付けすんなよwwwww
2019/10/14(月) 20:28:57.08ID:ZDEVVSo/
>>690
INotifyPropertyChangedの実装をネットで拾ってくれば数十行のコピペで行ける
嫌ならライブラリなど使わなくてもいい
2019/10/14(月) 21:17:15.84ID:PUjSeEPC
オープンソース化したらソースが見れるからとドキュメントを書かなくなり、
ユーザもテスト丸投げで品質が下がって
誰も使わなくなって誰も保守しなくなるパターンはいっぱい見てきた。
2019/10/14(月) 22:25:51.44ID:xbNYMWcX
PrismとかReactivePropertyみたいなもんを
汎用化してフル機能で実装するのは難しいかもしんないけど
必要な範囲を作り込むだけなら現実的な工数でできるんじゃないかな
2019/10/14(月) 22:46:59.97ID:O9NensbZ
同僚のプログラマはソース見れるからドキュメント書く必要はないと?
2019/10/15(火) 09:54:14.02ID:uXTdmEH6
今回のSDK更新でUWPDESKTOP完全に逝った? BLE等々使えなくなってるんだけど、、、
2019/10/23(水) 08:03:51.37ID:265Q+qtw
まるでOSS品質
2019/10/28(月) 08:03:50.83ID:Q9FrB4sN
.NET Core 3.0 のリリース以降はコミットも激減してるね
順調に終了に向けて畳みに入ったようだ
2019/10/28(月) 12:43:00.83ID:/BnASX8q
そりゃ元々死んでたのを移植してただけでおすし
2019/10/28(月) 15:48:12.23ID:Oh473u6X
リアニメイトではなく墓を移設しただけか
2019/10/28(月) 16:14:09.33ID:in/88NWJ
ポストモーテムプログラミング
2019/10/28(月) 18:19:00.88ID:JOlYOcTH
とにかく終了してよかった。ほんと惨い仕様だったからな。
2019/10/29(火) 09:12:27.78ID:5yTsnrxf
MS自身が終わったと公式にアナウンスしていないプロダクトが半端に世に残り続けるのは
良かったどころか地獄に巻き込まれかねんがな
2019/10/29(火) 19:31:53.21ID:YCAuRgWu
勝手に皆がwinforms終わった終わった言ってたけど終わってなかった
2019/10/29(火) 19:46:47.87ID:wj5iFmjc
wpfけなしてるのって
winformしか分からない低スキルおじさんと思ってんだけど偏見だろうか
2019/10/29(火) 19:53:59.26ID:+aWfVBYE
偏見じゃないだろ
統合失調症だよ
2019/10/29(火) 20:02:44.28ID:r3tx6fiI
それってとても重要なこと。低スキルには使えないなんて、
フレームワークとして致命的な欠陥品、ゴミと言わざるを得ない。

馬鹿でも使える、Delphi、VB6、C#+winformのユーザを取り込めるはずがない。

キミはwpf使えるおれ高スキルと自惚れてたようだが、実はこのスレでキミが一番滑稽だったんだよ。
2019/10/29(火) 20:12:26.96ID:lqcJQiNV
日本の大半のコーダーはwinformレベルしか理解できないだろ
2019/10/29(火) 20:17:06.23ID:YCAuRgWu
低レベルかどうか以前に使いにくい
listboxのアイテム右クリックして操作するのが非常にめんどくさい

ancestorのbindingとか見ると非常に汚いしこんなもん使いたくないけど使ってる
2019/10/29(火) 20:23:35.82ID:C299Q9qq
バカが使えねーとか結果もいいとこだろ
馬鹿かお前
2019/10/29(火) 20:36:27.81ID:YCAuRgWu
RelativeSource FindAncestor, AncestorType={x:Type Window}

これが汚い
これが平気で使えるのは頭おかしい

データ構造で親クラスのコレクションにアイテムがあったと言うことにだけ依存して親にアクセスするならわかるが
Type Windowと言う変な依存を作ってしまうのが汚い
2019/10/29(火) 20:42:22.81ID:YCAuRgWu
元のデータ構造に依存してデータ操作するならわかるんだけど
GUIのオブジェクトの構造に依存してまたそこからDataContext参照してそこでまた型が違うかもしれないものに対して
平気でアクセスしてしまう異常性

WPFは汚いよ
仕組みを作るべきだった
2019/10/29(火) 22:41:25.89ID:fUvf5qSP
>>712
そこ、Windowでも動くが、大体ListBoxだよな
それなら問題ないだろ
2019/10/30(水) 03:52:53.88ID:d1aCsWvI
汚いなさすがWPFきたない
2019/10/30(水) 11:26:47.04ID:X6nZEuPE
>>711
10年以上前から言われてたから普及するわけないと散々・・・
2019/10/31(木) 14:51:30.77ID:lA+PWvZ+
vb6でもwinformsでもwpfでもuwpでもelectronでも何でも自分の用途にあってればいいわけで、テクノロジーや、それを使う人をdisったりする理由にはならないと思う

サポート切れてるのは新規採用は自分ではしないかなというくらいで後は好きなの使えばいい


そして俺はWPF好き
2019/11/01(金) 07:16:23.42ID:POn0QVxB
俺もWPFの方が好きだなぁ
XAMLで構造が編集できるのがいい
2019/11/01(金) 08:29:04.64ID:luUnrp0t
>>712-713
> RelativeSource FindAncestor, AncestorType={x:Type Window}
> これが汚い
> これが平気で使えるのは頭おかしい
それなー

> データ構造で親クラスのコレクションにアイテムがあったと言うことにだけ依存して親にアクセスするならわかるが
いやいやそれは逆にビューがデータ構造に依存しちゃうからまずいでしょ

> Type Windowと言う変な依存を作ってしまうのが汚い
型で検索すると言うのが気持ち悪い
なぜビュー内の名前で参照できるようにしなかったんだろう?
2019/11/01(金) 08:48:08.78ID:XtQgzT46
ElementNameあるんだけど
721デフォルトの名無しさん
垢版 |
2019/11/01(金) 08:48:22.65ID:hqW7WiA1
>>719
別ファイルでDataTemplate定義してたりしたら使えないけど、ElementName使って名前で参照も出来る場所もあるよ
2019/11/01(金) 08:56:09.38ID:luUnrp0t
>>720-721
まじか、知らんかった…
休み明け(今日は有休)に会社で試してみよう
2019/11/01(金) 13:47:06.36ID:BwGO0cqt
.net coreでグラフ画像を作る方法ある?
chartコントロール使えなくなったから、新しいやり方知りたい
2019/11/01(金) 20:19:46.78ID:TtiCw1tS
そういうジャンルはHTMLにもう任せてしまえば楽なんだけどなあ
jsのライブラリを使えれば一番楽だしGUI操作などもインタラクティブに行える
大量の人間が常に開発を続け最新のトレンドを自分の製品に取り込める

けどWPFなんでしょ?
これからもJSと比べるとライブラリ大幅増の希望もないけどWPFなんだよね
2019/11/01(金) 20:23:09.89ID:7fq87ZBz
ライブラリ増に関してはWinUIがある
大幅増じゃないが
2019/11/01(金) 20:25:10.00ID:TtiCw1tS
これからもOSSのライブラリ依存の状況は進んでいくだろうけど
そういうプロジェクトでユーザーや開発者が多いのはjsなんだ
最先端で使いやすいものを取り入れようとするとC#+WPFは選択から外れる

ごく限られた環境で使うときにWPF+MVVMは使いやすい
しかし実際にアプリを作ると使いたいライブラリがなくあっても貧弱で古い事が多い
2019/11/01(金) 20:30:59.87ID:TtiCw1tS
WPFを使うのは自分が開発しやすいからであるが特定の最新機能などを使おうとすると
OSSが無かったり貧弱であったりしてまあ思い通りのアプリが作れないことがある
そういうのは個人ではどうにもならないレベルだったりするんだよね

自分が開発しやすいから選んだはずなのに実際はしやすくない

いつか誰かが作ってくれるのを期待して待つかそこだけ他の技術に頼るか

それかあきらめるか
2019/11/01(金) 20:43:54.06ID:TtiCw1tS
ヘタするとWPFで開発十数年の人が作ったWPF上のグラフアプリより
入門三日目のhtml+jsの作ったグラフアプリのほうが評価が高くなるかもしれない

そしてwebアプリは3日で出来てWPFは一か月かかるかもしれない
これからどう生きていくかは自分で選択してできるだけ狭い世界に閉じこもらないようにしないと環境と一緒に死んでしまう
2019/11/01(金) 20:46:57.03ID:EqckBJhH
いやjsのほうが人選ぶだろ
型なし言語をスキルない奴に触らせると地獄
これからはBlazorな!
2019/11/01(金) 20:51:28.94ID:TtiCw1tS
ユーザーの目が肥えて期待される機能の完成度のハードルがあがっていくと
高機能のありものを使うしかない

WPFに限らずC#に高機能な既製品が少ない
2019/11/01(金) 20:52:08.15ID:U/a7Wx11
WPF理解できずに逆ギレしてる ID:TtiCw1tS w
哀れやのう
2019/11/01(金) 20:55:00.88ID:TtiCw1tS
書いてる内容noどこがWPF理解できずの部分があるのか教えてくれよw
2019/11/01(金) 21:05:47.08ID:esyAMMm3
>>731
もう夢は終わったんだよ。WPFは消える。だがキミの仕事は安泰だ。
WPFの保守案件はWPFマスターのキミが独占できる。コボラーと同じ身分だ。
2019/11/01(金) 21:12:23.60ID:TtiCw1tS
自分がWPF使ってるのはGUIデザインがやりやすいからでHtml+CSSは理解できないししたくない
自分が使いやすいから使ってる

トータルで優秀だとは思えないが自分の好みで使ってる
いつか死ぬのは見えているでも使ってる
愛があるとかじゃなく今自分のレベルで使えるのがWPFだから使ってる
使える部分だけ使ってる
2019/11/01(金) 21:27:27.29ID:xPzXsDel
それでいいよ
2019/11/02(土) 17:14:50.59ID:POhg1hDY
jsのライブラリも有料化の波が・・・
2019/11/02(土) 17:54:38.37ID:akoaid8M
スレチだったらすみません
グラフ(データプロット)と表を並べるGUIを作りたいんだけど、最近のGUIプログラミングって、どの言語がおすすめ?
楽に覚えられてチャラいデザインにできたら御の字です
C#、MATLAB、Pythonは扱えますが、GUIプログラミングのことはよく知らないもので……
2019/11/02(土) 18:06:20.34ID:pWYzNK5/
webでjs使うのが一番表現は自由だと思う
2019/11/02(土) 19:10:48.46ID:FxhpmPNy
俺はプログラムができてオシャレな物作れるんだぞと言うのをアピールしたいなら
java scriptがおススメ
2019/11/02(土) 19:15:30.51ID:FxhpmPNy
俺はデータサイエンティストだぞというのをアピールしたければpythonがおすすめ
メジャーなグラフアプリもある
2019/11/02(土) 21:48:00.04ID:RbIBPvzK
俺は泥臭い仕事何でもやりますアピールしたいなら
java scriptがおススメ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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