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/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はオープンソース化したんで何か起きるかもしれん
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だよな
それなら問題ないだろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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