WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part21 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/05/09(火) 09:09:13.94ID:KhhA22kJ
Windows Presentation Frameworkについて語るスレ。

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part20
http://echo.2ch.net/test/read.cgi/tech/1458082648/

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

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
2017/11/10(金) 23:25:01.08ID:jdLju/Su
uwpからイベントをバインド出来るようになったから、ビヘイビアは殆ど書かなくても何とか成るようになった
2017/11/11(土) 02:00:39.82ID:ZPU8Qj6m
>>720
ビヘイビアやトリガーは1度作ってしまえば、既存のコントロールにポトペタで機能を追加出来て面白いけど、
使いまわししないならいちいち作るのは面倒なだけだね。
2017/11/11(土) 17:37:09.26ID:938sGYJm
先行者とMSの人のせいだな
2017/11/11(土) 19:20:18.21ID:ljWP0iHz
ちょまど神への信仰が足りないからです
2017/11/11(土) 19:53:53.83ID:zNtCqHZv
騎士団はお帰り
2017/11/11(土) 20:00:52.76ID:kwXAGkCp
ビヘイビアって依存関係プロバティーが仰々しいだけで、中身は大したことやってないから難しいものでもないんだけどね
警戒せずにコード読めば簡単に理解できるから
2017/11/11(土) 20:12:23.29ID:7DvP3YTX
ビヘイビアの問題はビューとロジックの分離を壊すこと
Libet信者なんか当時はXAMLでプログラミングしてドヤ顔してるような状態で本当に酷かった
2017/11/11(土) 20:32:22.35ID:WEOLmGSE
>ビヘイビアの問題はビューとロジックの分離を壊すこと

ビューにロジックが存在しちゃいかんって法はないだろ。
ビジネスロジックを置くべきじゃないって話と混同してるんじゃないか?
2017/11/11(土) 21:41:38.21ID:7DvP3YTX
ビューとロジックの分離というのは文脈によって様々なものを指すが、
WPFの根幹の思想としてのビューとロジックの分離は、「見た目はXAMLで定義し、振る舞いはコードで定義する」ってことだ。
それを破ってXAMLで振る舞いを定義しようとしたのがビヘイビア。
強力すぎる設定ファイルを与えると人は次第にそれで複雑なプログラミングをするようになるもので、
設定ファイルとして分けた意味がなくなってしまうんだよ。
ダイアログ出すくらいいいだろと思う人もいるかも知れないが、それを認め始めると歯止めが効かなくなるの。
2017/11/11(土) 22:15:20.74ID:WEOLmGSE
>WPFの根幹の思想としてのビューとロジックの分離は、「見た目はXAMLで定義し、振る舞いはコードで定義する」ってことだ。

XAMLのみがビューだと言っているのか?
ビヘイビアのコードはビューじゃないとしたら何だと?
2017/11/11(土) 22:53:43.27ID:4ZCNeoHz
Viewの「動作」を書くのは有だと思うが
何事も程々にですな
2017/11/11(土) 23:54:31.21ID:7DvP3YTX
>>730
ビューとロジックというのは相対的なもので、具体的に何を指すかは場合によって違う
WPFはもともと、デザイナーがデザインを作ってプログラマがコードビハインドを書くことで分業するように設計されている
プログラマ目線のビューとロジックの分離はもう一段上がるわけだが、それはWPFとは直接関係のない話だ
2017/11/12(日) 01:29:27.56ID:+a+fBSky
>>729
そうは思うわないな。
ビヘイビアが糞なのはそうだが。
2017/11/12(日) 07:43:01.13ID:/VKzDrV0
ビューとモデルの分離
プレゼンテーション(ビュー)ロジックとビジネスロジックの分離
デザインとロジックの分離

このあたりの勘違いだろうと突っ込んでみたら、説明がどんどん意味不明になって笑える
2017/11/12(日) 08:26:06.14ID:e5xLDhIK
WPF = MVVM だと思ってると敷居が高いがWinFormに代わる綺麗な
UIの作れるライブラリだと思って使えば敷居がかなり下がる。

コードビハインドとバインドしてイベントベタ書きでも何も問題無いんだよ。
MVVMなんて高尚なものは後でも良いのだ。
2017/11/12(日) 08:27:03.64ID:Y1Tn4iKT
>>732
ええええ
コードビハインドはViewでデザイナーが書くもんだと思ってたわ
2017/11/12(日) 08:38:52.00ID:e5xLDhIK
xamlを書けるホンモノのデザイナーなんて日本に存在するの?
2017/11/12(日) 09:21:24.73ID:RZNIwvSq
>>735
これが解ってない人が多すぎるね
2017/11/12(日) 10:09:18.93ID:e5xLDhIK
>>738
xamlにMVVM, Entity Framework, prismのようなライブラリ
初心者がフルコースで全部やろうとすると玉砕するのは当たり前。

先ずは、xamlとbindingだけ理解できれば十分だと思う。
740デフォルトの名無しさん
垢版 |
2017/11/12(日) 10:41:52.59ID:a3dJlCt1
ビヘイビア使わないでフルードアニメーション書くならどこに書くんだ?
Vしかないだろ
ビヘイビア自体は適切だろ
2017/11/12(日) 10:51:41.27ID:j1qE8Rg8
xamlとbindingを削除すればいいんだ。
2017/11/12(日) 16:56:10.96ID:txKtgk4R
だから、ビューが最小限のコンソールアプリを書いて、それにビューをつけるようにしておけば、モデルロジックとビューロジックの境目がわからみえるようになってくるよ
2017/11/13(月) 09:20:12.41ID:yQMeQSTi
xamlをWinFormに置き換えても、そのまんま動くのがModelだけど。
だったら、このスレと関係ないがな〜になる。
2017/11/13(月) 13:44:23.68ID:l5U7Am7V
ViewModelとModelをdllにしても問題なくビルド&実行できるなら
それはちゃんと責務の分離が出来ている
2017/11/13(月) 13:51:32.14ID:tuI+HHeV
それは違うかな
746デフォルトの名無しさん
垢版 |
2017/11/13(月) 20:19:43.72ID:kVXhdF1X
UI変更したらViewModelは影響受けるけどModelは一切影響受けない(ようにつくる)だけだろ
2017/11/13(月) 20:46:28.57ID:WAV6Z8eL
アプリを作れて動いて、それで誰も困ることがなければどうやって作っててもいいと思う。
メンテしないような使い捨てアプリにMVVMで作るコストかけても仕方ないし、メンテナンスや機能拡張するアプリを、ちゃんと設計せずに作るのはヤバイ。

適材適所
2017/11/13(月) 23:07:56.70ID:8PrajDy/
馬鹿は一つしか覚えられないから金のハンマーを欲しがる
2017/11/13(月) 23:37:32.63ID:WcCek0Ug
prismを見ると、MVVM以外にDIコンテナだったりナビゲーションサービスだったり画面遷移型のフレームワークってのももう一つの柱なのがわかる
WpfのゴールとしてMVVMだけじゃなくて、従来のWindowを次々開くタイプのアプリからWebのような一つのWindowで画面が遷移するタイプへの移行ってのも在るのかもしれんね
実際Windowをやたらと開かないタイプの方が遥かに使いやすい
2017/11/13(月) 23:45:47.26ID:1k/7dsAB
>>748
馬鹿でも沢山覚えられるぞ。
但し、カンナで釘を打ちハンマーで釘を抜くなんて使い方をするだけさ。
2017/11/14(火) 00:38:06.83ID:04qZtOw+
>>749
いや業務アプリってメインフレームの時代から画面遷移型が基本だぞ
だからWebでいいんじゃねとなる
仕事したことないならPrismの画面遷移型アプリみたいなのは新鮮に感じるのかな
2017/11/14(火) 02:03:30.52ID:sCopJL4R
>>719
ありがとう、今日試してみたらうまくバインドできたよ
自己流であまり綺麗じゃないかもしれないが
ただ、今度は画面のレイアウトがうまくいかない…
canvas使ってペタペタやれば出来るのかもしれないが、せっかくだからもっとうまくいくやり方でやってみる
2017/11/14(火) 07:01:42.13ID:FlTFFitR
>>748
バカじゃないけどたくさん覚えるのは面倒だから金のハンマーが欲しいわ
2017/11/14(火) 07:02:55.05ID:FlTFFitR
>>751
そもそもメインフレーム時代はマルチウィンドとかなかったりしたしな
2017/11/14(火) 08:35:55.74ID:bKDw6GK5
>>754
テキストベースのポップアップウインドウもどきは有ったぞ
2017/11/14(火) 09:03:02.17ID:ElF9INq6
金のハンマーでは釘を打てないと思うw
2017/11/14(火) 09:06:18.52ID:bKDw6GK5
>>756
豆腐になら打てる
2017/11/14(火) 09:09:48.82ID:RygzRtlR
バナナで釘が打てます
https://www.youtube.com/watch?v=pk3xse7fPZI
2017/11/14(火) 12:25:19.37ID:9XknVuf7
>>748
暗記は馬鹿文系の得意技。おまえもそっち系だな。
2017/11/14(火) 12:59:09.26ID:mIQjyaBb
さすがにそれはない
2017/11/14(火) 14:17:02.27ID:fdj+YHIz
ちょまど神への信仰が足りないから争いが起きるのです
2017/11/14(火) 14:22:41.54ID:kMJcGUhs
新興宗教の神など信仰でけんわ
2017/11/14(火) 14:57:50.50ID:cwVtWuY5
テンプル騎士団かな?
2017/11/14(火) 19:44:59.16ID:sSxxq2Sz
ちょまど神は、可愛くて漫画がプロ並みでプログラミングも出来るがオタクだな。
中川しよう子と同じ香りがする
2017/11/14(火) 20:53:34.28ID:31nONYO+
>>764
いつも思うけど、公人でもプライバシー売ってる芸能人でもない一般人に粘着する奴って
ストーカーと同じ。気色悪いわ。他人の前に自分自身をよく見てみろ。

自分で自分をおかしいと思わないなら、あんた人間として壊れてるよマジで。
言っても無駄だと思うけど。
2017/11/14(火) 21:17:09.05ID:sSxxq2Sz
>>765
なんでオレに言う。
別嬪さんは全部好きだが彼女に特別興味があるわけではない。
2017/11/14(火) 21:47:48.12ID:Dc+h7CRO
>>759
> 暗記は馬鹿文系の得意技。おまえもそっち系だな。
プログラミングで暗記とか言う奴の方が馬鹿文系っぽいが w
2017/11/14(火) 22:09:21.65ID:FOR7JOrW
馬鹿にしていた文系に負けたとか、
嫌な思い出でもあるのでしょう
触れなさんな
769デフォルトの名無しさん
垢版 |
2017/11/15(水) 03:49:16.30ID:PBDUFr1U
xamarinで調べごとするとチンポ騎士団が嫌でも目にはいるのが厄介
2017/11/15(水) 10:47:03.72ID:zqgKZxrO
環境毎捨てるしか無いな
2017/11/15(水) 13:12:12.68ID:qga1lTtf
覚えらないからWPF使えないと思っている馬鹿がいるようだが、
単にWPFは使い物にならないから使われてない。WPFを理解すれば分かること。

ゴミすぎてもう消えることは決定している。
2017/11/15(水) 13:32:09.19ID:nmEsB5Z0
問題ないとは言わんが、回避できない問題山積ってわけでもないだろ
どうせ口だけで具体的に何も指摘できないんだろうねw
2017/11/15(水) 20:20:52.23ID:EZoshRrj
標準でVからVMのメソッドに直接バインドできたらいいのに
2017/11/15(水) 21:07:44.79ID:wdJ6Ok7d
データバインドがようやく分かってきた
これがあると飛躍的に出来ることが拡がるな
2017/11/15(水) 22:45:39.54ID:iANpDJJe
>>774
便利だろ
776デフォルトの名無しさん
垢版 |
2017/11/16(木) 17:08:22.10ID:PzwxtFUT
下記コードは選択中にツールチップが表示されますが、
選択された後にコンボボックス上でツールチップを表示させることは可能でしょうか?
以上よろしくお願いいたします。


<Grid>
<StackPanel>

<ComboBox Width="100">
<ComboBoxItem ToolTip="This it tool tip for item 1">This it tool tip for item 1</ComboBoxItem>
<ComboBoxItem ToolTip="This it tool tip for item 2">This it tool tip for item 2</ComboBoxItem>
</ComboBox>

</StackPanel>

</Grid>
2017/11/16(木) 18:20:42.66ID:x/aWQ3sN
>>776
<Grid>
<StackPanel>

<ComboBox
x:Name="ComboBox1"
Width="100"
ToolTip="{Binding SelectedItem.ToolTip, ElementName=ComboBox1}">
<ComboBoxItem Content="This it tool tip for item 1" ToolTip="This it tool tip for item 1" />
<ComboBoxItem Content="This it tool tip for item 2" ToolTip="This it tool tip for item 2" />
</ComboBox>

</StackPanel>
</Grid>
778デフォルトの名無しさん
垢版 |
2017/11/16(木) 18:59:08.25ID:PzwxtFUT
>>777

ありがとうございます!意外とシンプルでした。。。
779デフォルトの名無しさん
垢版 |
2017/11/19(日) 23:30:40.15ID:DGB0My1S
>>751
当然GUIではないが、SASは実現してたね。
しかもWin3.1が出てきた時代には、
メインフレームのマルチウインドウプログラム<=>Win3.1のGUIで
互換性を保っていた。
他のソフトでは見たことないけど。
2017/11/20(月) 18:20:06.51ID:xUHYIzKM
MVVMの勉強を行なっているのですがコマンドってどう扱えば良いでしょうか
元々プログラミング自体勉強し始めたばかりなので初歩的な部分で理解できていない部分もあるとは思いますがサンプルを見てもどれも違った作り方をしてて動きも全くイメージが掴めません…
あるボタンを
command ={Binding testbutton}
とした場合、ボタンを押した状態はtrueやfalseも入っておらずどのように処理を記述すれば良いのか分かりません…

例えばボタンを押したらメッセージボックスを出すだけの単純な物を作ろうとした時に
コマンドを使わずクリックイベントで処理するなら

-viewmodel-
private void button(object sender , RoutedEventArgs e)
{
model.test();
}

-model-
public void test()
{
MessageBox.Show(Test);
}


これをコマンドに置き換えるとどういう形になるのでしょうか?
答えにくい質問で申し訳ありませんがよろしくお願い致します
2017/11/20(月) 20:07:59.86ID:2/KPMrVL
>>780
とりあえずRelayCommandでGoogle先生にお伺いを立ててみよう
2017/11/20(月) 20:19:45.47ID:Q9UPjx7d
一番かんたんなのはICommadを実装したクラスを用意する
だがコマンド毎にクラスとか毎回手間すぎて禿げるので
DelegateCommandやRelayCommandを作るか作ってあるものを利用する
これはMVVMフレームワークごとに呼び方が違うだけでやりたいことは一緒
https://ideone.com/D0rrm7
783デフォルトの名無しさん
垢版 |
2017/11/20(月) 20:55:31.92ID:f1XDtXet
コマンドを使うとコードをVに書かないで済む

ただ…
イベントと比べると
コマンドは送れる情報量が少ない
コントロールに目的の動作に対応したCommandプロパティがあるとは限らない
VMがとっちらかる可能性がある
2017/11/20(月) 21:54:47.51ID:uTaWa3cA
いまさらWPF勉強はじめたけど凡人には敷居たかいわ;;
いや年とったせいかな、いつもどおりデバッグしてF5、デバッグしてF5とえんえんとやって覚えていくんだが
おれ何十年おなじことやっとんねん、と考えると何とも以遠気分になる

でもたのちい
2017/11/20(月) 22:12:33.94ID:2/KPMrVL
Name付けまくればFormsと同じ
2017/11/20(月) 23:01:16.33ID:xUHYIzKM
>>782
わざわざ作って頂いて本当にありがとうございます
質問なのですが
class ViewModel
{
FooModel fooModel = new FooModel();

public ICommand testbutton { get; set; }

public ViewModel()
{
testbutton = new TestButtonCommand { model = fooModel };
}
}
以下の行はどういう意味なのでしょうか?
testbutton = new TestButtonCommand { model = fooModel };

また
class TestButtonCommand : ICommand
{
public event EventHandler CanExecuteChanged;

public bool CanExecute(object parameter) => true; // ←ここをfalseにするとボタン押せないのを確認する

public void Execute(object parameter)
{
model.test();
}

ボタンを押した際に特に何も指定していない以下の部分がボタンの状態を確認しているのでしょうか?
自分の頭が悪過ぎるのもありますがやっぱり難しいです…
public bool CanExecute(object parameter) => true
787デフォルトの名無しさん
垢版 |
2017/11/21(火) 00:15:42.31ID:D1w1iQjW
>>786
ボタンはコマンドのCanExecuteの戻り値を見てボタンの実行の可否を判断してる
当然ながら状態変わったと通知しないと変更されても気づかない

というか普通にググって順番に見て言って ” 勉強 ”してからわからないことを聞いたほうがいいよ


入門者の数だけみんなレスしないといけない
ここはそんな場所じゃない
2017/11/21(火) 00:20:59.90ID:SOf041Mo
今からでも止めた方がいいんじゃないかと思うな
789デフォルトの名無しさん
垢版 |
2017/11/21(火) 00:23:39.47ID:D1w1iQjW
WPFの難しさの理由

・柔軟なレイアウトが可能だがそのルールが理解しづらい
・MVVMを生かすための仕組みが複雑
・デバッグしづらい
2017/11/21(火) 00:31:49.69ID:4k0F/AOl
そうは言っても
WPF一度でもやると
Formには戻れなくなる不思議
2017/11/21(火) 00:35:52.93ID:SOf041Mo
慣れればね
792デフォルトの名無しさん
垢版 |
2017/11/21(火) 00:36:01.62ID:D1w1iQjW
winformsに戻れないことはないよ
使い道次第で使い分ければいい

WPFはrichtextboxが絶望的にダメだから
winforms使う
793デフォルトの名無しさん
垢版 |
2017/11/21(火) 00:38:18.37ID:D1w1iQjW
textboxを二〜三個はって数値入れてボタン押して実行
ログを延々出す用途だとWPFは使いたくない
2017/11/21(火) 02:24:00.52ID:6rwGwV6M
レイアウトはそんなに難しくないね

やっぱり保守性(可読性)の悪さと、パフォーマンス的にGDIの置き換えが
不可能な分野があるのは痛いね

一時期勉強してたけどこれで一気に萎えた
こんなの絶対に普及しないと確信したし
2017/11/21(火) 04:02:00.78ID:b9UF07N2
ゲームエンジンでギョーミーなアプリ作ってる人いますか?
2017/11/21(火) 08:30:24.18ID:uRdcszQQ
”ギョーミー”...センスゼロな造語だな
2017/11/21(火) 08:39:08.64ID:8bqPo3eI
保守性って言うけどhtmlと大して変わらんと思うけどな
2017/11/21(火) 08:59:45.88ID:53/zLj3n
>>796
ギョーミーアプリのUIがセンスなしの塊だからそれで良いのだ。
ギョーミーって最初に見たときは英語だと思ったわw
2017/11/21(火) 12:31:14.01ID:5itqrRZG
一般論としては訳分からんジャーゴン使いたがる人は群れたい人だね
ジャーゴンの機能ってそれを使うことで同じ村の村人の一員であると感じさせることだから

それがいいか悪いかしらんけど、俺個人は気色悪いし嫌いだねこういうの
2017/11/21(火) 12:39:41.26ID:53/zLj3n
it業界はワケワカラン用語ばかりさ
2017/11/21(火) 12:52:42.81ID:JYBkdGYB
そういえばWPFって3D機能あるけど使ってる奴いるのかな
業務でやらされたら悪夢だね
802デフォルトの名無しさん
垢版 |
2017/11/21(火) 12:59:08.76ID:euHtQ1vT
3D使うならブラウザ上のほうがパフォーマンス高いよ
開発の情報も多いし

WPFの3Dはおまけ機能だから
2017/11/21(火) 14:04:35.75ID:xjPCkXTo
>>799
ジャーゴンというジャーゴンを使って気色悪いし嫌いと宣言するセンスワロタ
2017/11/21(火) 14:32:56.14ID:eAcVzyfG
ジャーゴンって言うか
死んでる? じゃあ、他の生きてるの全部殺して再起動しろ
なんて会話が飛び交う業界だしw
2017/11/21(火) 14:39:10.45ID:PCscOrJ1
明日は半殺しにしようか(おはぎ)
2017/11/21(火) 16:18:22.00ID:5itqrRZG
>>804
殺すっていう言葉は他の工学でも昔から割と使うよ
俺は元は電気系だけど無効化するって意味で「そのTrを殺して...」とか普通に言う
たぶん機械系でも使うはず
2017/11/21(火) 21:25:24.91ID:AM6ulXU9
サービスで八分殺しにしておきますか
2017/11/21(火) 22:40:55.07ID:xtsth3PT
XAMLをexeの外に出しといて
実行時にLoadするやり方って一般的?
2017/11/21(火) 22:45:52.11ID:KARCkhIl
要件次第
2017/11/21(火) 23:17:39.18ID:xtsth3PT
>>809
その要件次第のところを聞きたい
どういう要件のときに
XAMLを外に出すのか
811デフォルトの名無しさん
垢版 |
2017/11/22(水) 00:19:46.15ID:KA0qTObf
visual studio !
2017/11/22(水) 08:48:48.36ID:LeJtXfB9
>>822
画面をリコンパイルなしで変えたいときじゃない?
ユーザーにカスタマイズさせるとか。
2017/11/22(水) 09:41:20.61ID:9afa34qB
xamlを動的に生成、もしくは読み込ませるのはFlowDocumentを作りたいとき
具体的には印刷プレビュー
2017/11/22(水) 22:27:54.08ID:9afa34qB
今さら気付いたんだが、デバッグ起動でウインドウを表示したままxamlを編集すると
リビルドなしにそのままデザインが反映されるのな
デュアルモニターなら作業はかどる
2017/11/23(木) 10:33:10.66ID:34iV4lyO
xamlで余白の多い文字(例えばm)などの余白部分を切り取って
矩形で切り出したいんだがやり方分かりませんか?
2017/11/23(木) 13:44:59.76ID:WtM3akXb
mって余白多いか?
・の余白が多いなら分かるが
2017/11/23(木) 15:43:55.15ID:quZnEBxv
フォントを変える
2017/11/23(木) 16:33:14.91ID:O+EE0rTX
ymW

確かに上にも下にも余白がある。
ペゾルトの本に書いてあった気がするけど何か名前もついてるんだよねこれ
こういうのWPFの守備範囲と違うような気がしないでもない。知らんけど
2017/11/23(木) 16:38:48.30ID:E5KFBI6l
https://ja.m.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Typeface_lines1.png

うーむ
2017/11/23(木) 16:48:04.17ID:E5KFBI6l
WPF フォントで検索しようとしたら
「ふ」を入力したところで「普及しない」ってサジェストされたぜ
悲しいね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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