トップページtech
1001コメント292KB

WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part7

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/08/22(日) 21:11:53
一向に普及しないユーザーインターフェースシステム
Windows Presentation Frameworkについて語るスレ。
パワフルで柔軟すぎるのが敗因か? 正直ついていけないよね…。

Visual Studio 2010
ttp://www.microsoft.com/japan/msdn/vstudio/
Microsoft .NET Framework 4 (Web インストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=9CFB2D51-5FF4-4491-B0E5-B386F32C0992&displaylang=ja
Microsoft .NET Framework 4 (スタンドアロンインストーラー)
http://www.microsoft.com/downloads/details.aspx?familyid=0A391ABD-25C1-4FC0-919F-B21F31AB88B7&displaylang=ja

関連スレ
Microsoft Silverlight その6
ttp://pc12.2ch.net/test/read.cgi/tech/1271580489/

過去スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part6
http://hibari.2ch.net/test/read.cgi/tech/1274423236/
WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5
http://pc12.2ch.net/test/read.cgi/tech/1261879110/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1245384489/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1231506876/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
ttp://pc11.2ch.net/test/read.cgi/tech/1211453941/
【新GUI FW】WPF(XAML,AVALON,.NET3.0)【重い?】
ttp://pc11.2ch.net/test/read.cgi/tech/1162950198/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
0794デフォルトの名無しさん2010/11/26(金) 13:42:47
その程度のことが面倒に感じるようなものにMVVM適用するのはどうかとおもうけど
必要ならPrism Template Packでも使えば
0795デフォルトの名無しさん2010/11/26(金) 13:45:03
Prismって何かバグがあったような気がするんだが
0796デフォルトの名無しさん2010/11/26(金) 14:09:36
>>794
なにそれ?
0797デフォルトの名無しさん2010/11/26(金) 21:02:09
何かバグはあるさ!
0798デフォルトの名無しさん2010/11/26(金) 22:58:04
>>793
テンプレートでできなくもない。t4 templateでぐぐると、いくつかmvvmのコード自動生成の作例が出てくる。
WPFはもっとコードの自動生成を取り入れないと普及しないだろうねえ。
イベントハンドラのスタブをタブキー二回で作ってくれるぐらい簡単に。
0799デフォルトの名無しさん2010/11/27(土) 01:28:16
xamlにインラインコードが使えるようにならないかな…
0800デフォルトの名無しさん2010/11/27(土) 07:31:38
VMのプロパティはEXCELとか正規表現とかでなんとか生成できるレベルだけど、
DependencyProperty実装するときのの凶悪なコーディング量はどうにかしてほしいもんだ
0801デフォルトの名無しさん2010/11/27(土) 11:22:15
>>800
あれはほんと後付けらしい醜さがあるな・・
lispのマクロとか欲しくなる
F#のワークフローとかコード引用符使ったらすっきり書けるかな(よく知らないけど)
0802デフォルトの名無しさん2010/11/27(土) 13:15:23
propdp[TAB]

まぁ、メンテも含めたらそれでも十分に極悪だがなw
0803デフォルトの名無しさん2010/11/27(土) 13:37:58
>>802
そんなのあったんだ
http://msdn.microsoft.com/ja-jp/library/z41h7fat.aspxに載ってないのに…

でもコールバックは自分で追加せんといかんのが片手落ちだな
0804デフォルトの名無しさん2010/11/27(土) 13:38:29
WPF入門とかのページそこそこあるけど
イゾンプロパティの話で
propdpのインテリセンスのこと書いてるのほとんどないよね


ぶっちゃけ、細かい使用とか話してpublic static readlyうんちゃらかんちゃら作る必要があります
ってかくより、これらはおまじないです
propdpでイゾンプロパティが作れます
だけでいいと思うんだが。
0805デフォルトの名無しさん2010/11/27(土) 13:44:26
いや見た目にうざいしスニペットがありゃいいってもんじゃないと思うけど
0806デフォルトの名無しさん2010/11/27(土) 13:47:11
WPF入門であって、VS入門じゃないから
0807デフォルトの名無しさん2010/11/27(土) 19:39:55
StyleCop先生「
 さぁ、private static readonlyは先頭に並べるのです、
 そしてプロパティはコンストラクタ、イベントの後ろです。
 イゾンプロパ…何それ?」
FxCop先生「
 アホかぼけ、なんでこんな糞コードを書…XAMLから自動生…しるかボケ!」

言語構文に組み込んでくれとまではいわないが、
せめて自社ツールだけでもどうにかしてくれ
0808デフォルトの名無しさん2010/11/28(日) 13:55:50
>>788
つかってるよー
3次元プロットはグラボ必須だし、
4次元の可視化はシェーダが欲しい。
0809デフォルトの名無しさん2010/11/28(日) 18:13:02
オサレなGUIより地味だけど機能的で快適なほうが良い
0810デフォルトの名無しさん2010/11/28(日) 18:21:32
美しさが分からん奴にそんなもの作れないよ
機能美って言葉を知ってるかい

VimだってEmacsだってあれはあれで美しいのだ
0811デフォルトの名無しさん2010/11/28(日) 18:29:02
>>809
オサレ⇔地味って軸と UX の良し悪しはそこまで相関ないよ。
オサレで使いやすい、オサレだけど使いにくい、
地味でも使いやすい、地味な上に使いにくい、全部ある。
0812デフォルトの名無しさん2010/11/28(日) 18:43:57
特定の顧客から依頼を受けて作るならいいけど
そうでなきゃ「うわ、地味。ショボそう」とか思っちゃう人もいるしな
0813デフォルトの名無しさん2010/11/28(日) 21:34:41
モジの色がカラフルで、画像と合わせて、グラデーションかかったボタンが激しく動き回り・・・
おしゃれだけど、見づらくて使いづらそうだね。
0814デフォルトの名無しさん2010/11/28(日) 21:36:08
地味に作りたきゃ地味に作れるだろ
お前しだいだ
0815デフォルトの名無しさん2010/11/28(日) 21:38:34
というか>>813がオシャレかな
派手でセンス悪いだけだろう
0816デフォルトの名無しさん2010/11/28(日) 22:05:10
>>813
おしゃれなの?それ
楳図かずおみたいな奴だな
0817デフォルトの名無しさん2010/11/28(日) 22:08:32
どんな恐怖アプリだよ
0818デフォルトの名無しさん2010/11/28(日) 22:12:43
そういうセンスの人はblinkとかマーキーとか使いまくっちゃうんだよ
0819デフォルトの名無しさん2010/11/28(日) 22:26:27
提供された機能は使い切らないといけないみたいな信条でもあるんじゃねえか
0820デフォルトの名無しさん2010/11/28(日) 22:29:10
ボタンが動き回り・・・
の点々がいいよね

ボタンなんかどんなGUIフレームワークでも動かせるけどお前ボタン動き回る画面なんか作ったことあんのかよとw
0821デフォルトの名無しさん2010/11/28(日) 22:30:05
js覚え初めのころ逃げるボタンとか作ったよ
0822デフォルトの名無しさん2010/11/28(日) 22:31:16
>ボタン動き回る画面
Blend最初触ったとき作ったぞw

残念ながら世に出ることは無かったが
0823デフォルトの名無しさん2010/11/28(日) 22:47:37
画像に合わせて激しく動き回るんだぞw
0824デフォルトの名無しさん2010/11/28(日) 22:49:33
つかまえてごらん〜

うふふふ
0825デフォルトの名無しさん2010/11/28(日) 23:21:43
埼玉の産婦人科「愛生会」の医院長が作った。
0826デフォルトの名無しさん2010/11/28(日) 23:46:57
>>825
あの人、美的センスはあるはずw
ネイチャーフォトのレベル高いよ
0827デフォルトの名無しさん2010/11/28(日) 23:55:05
WPFを使っているとありがちなこと
・なんでもかんでもアニメーション
・フェードインフェードアウト乱発
・とりあえず半透明
・以上を全てやっていないとゴネだす上司や低能デザイナーがいる

VS2010のI/Fのようにシンプルな見た目で
要所要所をピンポイントで強調するような使い方が一番上手いんだろうが、
そこまで理解できる人(得に上司)が世の中どれだけいることやら。
0828デフォルトの名無しさん2010/11/28(日) 23:55:21
ところでみんな、SQL使ってる?性能でてる?
0829デフォルトの名無しさん2010/11/28(日) 23:56:48
ごめん、誤爆
0830デフォルトの名無しさん2010/11/29(月) 00:07:50
>>827
だって、せっかくそういう機能があるんだもん
使わないともったいないじゃん
0831デフォルトの名無しさん2010/11/29(月) 00:24:48
アニメーションは体感速度に繋がるから
不必要値は言い切れない
0832デフォルトの名無しさん2010/11/29(月) 00:36:36
アニメーションも入れ方次第なのよね。
単に派手にするだけのビジュアルデザインじゃだめ。
UX デザインしないと。

例えば、Windows のウィンドウを最小化するときのアニメーションには
「次、ここをクリックしたら元のサイズに戻せますよ」という場所を示す意味がある。
でたらめな場所に向かって縮小したりしちゃダメ。
0833デフォルトの名無しさん2010/11/29(月) 01:51:37
ウィンドウは四角ければ十分な俺には全て無駄に見える
なんで見た目に凝るのか
0834デフォルトの名無しさん2010/11/29(月) 01:55:20
まあwindows上だと意味ないよね
ひたすら効率化の世界だしUIもあれだし

凝るとすればタブレットとか最近流行りのUIなどでの話だね
0835デフォルトの名無しさん2010/11/29(月) 01:56:18
>>833
まだ見た目(ry
0836デフォルトの名無しさん2010/11/29(月) 01:56:29
機能だけでいいならものつくりは簡単だな

車、パソコン、携帯電話、携帯ゲーム機、扇風機etc
たんにその本来の役目さえ果たせればいいんじゃなくてかっこいい見た目じゃないと売れない。
プログラムも同じことだよ
0837デフォルトの名無しさん2010/11/29(月) 01:59:25
>>833
ウィンドウなんて必要か?凝りすぎじゃね?
0838デフォルトの名無しさん2010/11/29(月) 02:05:14
そういえばそうだな
だが文字入力はいやだ
0839デフォルトの名無しさん2010/11/29(月) 02:18:29
文字入力が嫌ってイミフ CUIが嫌なんじゃないのか。
0840デフォルトの名無しさん2010/11/29(月) 02:25:10
ここの人たちCUIでわかるのか
じゃあCUIがいやだ
0841デフォルトの名無しさん2010/11/29(月) 02:26:44
データバインディングってのは
ターゲットもソースも
両方依存関係プロパティじゃないとダメなの?
0842デフォルトの名無しさん2010/11/29(月) 02:27:43
ああ、アレだろ、クイね。
もちろんわかるよ。
0843デフォルトの名無しさん2010/11/29(月) 02:28:42
>>836
まったく。
機能だけなら簡単と言い切るつもりもないけど、機能そろってりゃ他はどうでもいいってもんじゃない。

芸術的な意味のビジュアルデザインよくないと売れないというのももちろんあるし、
同時に UX デザインもされてる。

ボタンの位置とか大きさはどうなってれば使いやすいかとか、
ものすごいノウハウの積み重ねがある。
0844デフォルトの名無しさん2010/11/29(月) 02:29:23
>>841
ソース側は割と自由効く。
0845デフォルトの名無しさん2010/11/29(月) 02:30:30
>>841
ターゲットは依存関係プロパティじゃないとダメ。ソースは普通のプロパティでおk
0846デフォルトの名無しさん2010/11/29(月) 02:41:25
>>845
なるほどThx
TextBoxに入力した値が、いちいちなんちゃらイベントとか作らずすぐに画面に反映されて感動した。
0847デフォルトの名無しさん2010/11/29(月) 13:07:33
まともにWPFを解説してるサイトが
@IT、未確認飛行C
の二つしかない。

この二つだけで勉強しろというのか
もっとふえねぇかな。
0848デフォルトの名無しさん2010/11/29(月) 13:14:30
>>847
msdnが基本だろ
0849デフォルトの名無しさん2010/11/29(月) 13:18:32
wpftutorialはダメなん?
0850デフォルトの名無しさん2010/11/29(月) 20:18:41
俺もデータバインディングやって触ってみたけど、
XaML
0851デフォルトの名無しさん2010/11/29(月) 20:20:07
やべ途中で切れた
XAML手書きでやってるのが多いね
VS2010のデザイナでどうやるのかよくわかんね
デザイナでできる事をわざわざ手書きでやりたくないしな・・
0852デフォルトの名無しさん2010/11/29(月) 20:39:08
デザイナなんて飾りです
0853デフォルトの名無しさん2010/11/29(月) 20:40:09
デザイナって
プロパティウィンドウのこと?
0854デフォルトの名無しさん2010/11/29(月) 22:50:42
デザイナーもIntelliSenseもVisual Studio 2010の一部です!
0855デフォルトの名無しさん2010/11/30(火) 00:08:02
俺のした勉強の仕方。
>>847 で概要チェック。
後は Expression Blend いじりながら Binding, Template, Animation まわり
の知識を固めていく。( 〜ブログ放浪〜 )
最後に MSDN。

まあ、WinForms の時もこんな感じで勉強、ってか慣れていったが。。
素養のある人は MSDN 直でもわかるのかね。
0856デフォルトの名無しさん2010/11/30(火) 00:17:54
Blendなって持ってネーヨ (´・ω・`)
0857デフォルトの名無しさん2010/11/30(火) 00:40:09
つ【学生】
0858デフォルトの名無しさん2010/11/30(火) 00:51:19
解説サイト見てちょっと改変して分かった気分になって、エッセンシャルWPF読んだらよく分からなくて
ブログ放浪してやっと自分がやってた事が理解できるようになって、最後にMSDN見て納得した。

その後Blendも買って楽しいWPFライフ←今ここ
0859デフォルトの名無しさん2010/11/30(火) 02:50:27
<setter property="なんとか"/>

このなんとかの部分インテリセンスきかねぇ
クソだな
0860デフォルトの名無しさん2010/11/30(火) 04:31:01
依存関係プロパティをもっていれば
INotifyPropertyChange
を実装する必要はないんですか?
0861デフォルトの名無しさん2010/11/30(火) 08:55:23
持てるなら。
0862デフォルトの名無しさん2010/11/30(火) 10:20:42
持たせてみせよう。
0863デフォルトの名無しさん2010/11/30(火) 10:23:48
プロパティ。
0864デフォルトの名無しさん2010/11/30(火) 10:31:37
>>859
最新の Silverlight Tools 入れたら IntelliSense 効くようになる。
0865デフォルトの名無しさん2010/11/30(火) 11:30:42
コマンドってなんやん
イベント利用したら

Button1Click+=(sender,e)=>MessageBox.Show("Hello World");

これだけでいいのに
なんかICommandインターフェースを実装してExecuteがどうたらこうたらやらなきゃいけなくてわけわからん
なんでイベントがダメでコマンドならいいんだ?俺には難しすぎる
0866 ◆Jzt/EX0TGY8T 2010/11/30(火) 11:48:37
>>865
別にコマンドは無理して使わなくてもいい

コマンドじゃなくてイベントだと
例えばボタンが押された処理動作を
メニューやホットキーなど複数の条件から呼び出したい場合
それぞれイベントハンドラを記述していくことになる
だが、コマンドを作っておけば、XAMLでコマンド名を書くだけでいい
それ以外はバインディングなどをイベントハンドラで処理する場合
値が正しいかどうかのチェックで動作を変える場合も
イベントだと自前で実装することになる
コマンドなら雛形があるのでそれにあわせて書けばいい

今のおれがわかるのはこれぐらいだな
0867デフォルトの名無しさん2010/11/30(火) 12:02:05
>コマンドじゃなくてイベントだと
>例えばボタンが押された処理動作を
>メニューやホットキーなど複数の条件から呼び出したい場合
>それぞれイベントハンドラを記述していくことになる
>だが、コマンドを作っておけば、XAMLでコマンド名を書くだけでいい

それはイベントだって同じじゃあないの
Methodというメソッドを作って
<Button Click="Method"/>
<Menu Click="Method"/>
ホットキーはしらんけど
<KeyPress="Method"/>
多分こんな感じでしょ
イベントハンドラはひとつで
XMLのほうでイベントハンドラ名を書くだけでいいっしょ
0868 ◆Jzt/EX0TGY8T 2010/11/30(火) 12:13:20
>>867
そういえばそうだな
Winフォームと比べてたわ

あとは、CanExuteがfalseの場合
呼び出しもとのコントロールが自動で無効になるとか
イベントだとEnable=falseとかしないとだめでしょ
0869デフォルトの名無しさん2010/11/30(火) 12:15:06
>>865
デリゲートがシリアライズしづらいからクラスでラップしちゃって Java みたいになってる。
あと、コマンドには実行可否の判定(CanExecute)がつきものなので。
0870デフォルトの名無しさん2010/11/30(火) 12:16:45
>>867
それはでも、コマンドである必要ない。

ユーザーからの入力イベントの他に、
ちゃんと意味論的なレイヤーのイベント(今コマンドでやってるようなこと)をデリゲートで処理ってのもできたはず。
やっぱ、CanExecute とシリアライズのしやすさの問題でわざわざ ICommand インターフェイスにしてあるんだと思う。
0871デフォルトの名無しさん2010/11/30(火) 12:30:33
イベントに実行できるかどうかの判定を持たせたものがコマンド
ってもんでいいのかなぁ・・・

コマンドの説明見ても、「上書き保存」は、既存のファイルが無かったらできないようにする
「切り取り」は、テキストが選択されてないとできないようにする
とかそんなサンプルばっかりだし
0872 ◆Jzt/EX0TGY8T 2010/11/30(火) 12:35:03
>>871
結局MVVMで依存しないようにするにはコマンド使うことになるわけで
そういうのが必要ない場合はイベントで普通に書けばいいんじゃない
0873デフォルトの名無しさん2010/11/30(火) 12:46:02
要するにイベントハンドラだけでは書きづらいような部分について、
新たにコマンドという概念を追加して
XAML上で使えるようにしたってことだな。
0874デフォルトの名無しさん2010/11/30(火) 13:27:05
シリアライズってのはどゆこと?逐次化?
0875デフォルトの名無しさん2010/11/30(火) 13:35:30
>>874
バイナリ列とかXML文字列に変換って意味<シリアライズ(直列化)。

コードビハインドなしのXAML中にかけるのは、直列化可能なものだけなのよね。
デリゲートは実は直列化できなくて、
XAML のイベントへの代入は結構内部的に微妙なことしてる
(XAML から自動生成される .g.cs の方にイベント追加の += が生成されてる)
0876デフォルトの名無しさん2010/11/30(火) 13:43:35
>>875
なるほど、たしかにビハインドのないカスタムコントロールではXAMLにイベントを書けない。
コマンドはプロパティで扱えるのでXAMLでかけるということだな。
プロパティが直列化できるのはMSがそう設計したから?イベントも同じように出来なかったのかな。
0877デフォルトの名無しさん2010/11/30(火) 14:27:35
デリゲートは中身メソッドだからなぁ。

プロパティ = 見かけ上はデータ → 直列化可能
イベント = デリゲート = 中身メソッド → ダメ

という感じ。

なんというか、初期化子使って
var obj = new Type { X = ... }
みたいに書けるものだけが XAML 化可能。
0878デフォルトの名無しさん2010/11/30(火) 15:42:31
コマンドはロジック側がビューに依存するのを避けるためにあるんだよ。
イベントだとイベントハンドラを登録する際にロジックがビューに依存してしまう。
コマンドは結局、ビューがロジックのpublicメソッドを呼んでるのと同じなんだけど
それをXAMLだけで宣言的に書けるようにしてある。
0879デフォルトの名無しさん2010/11/30(火) 15:47:01
XAMLとコードビハインドは同じViewとみなしてやっても問題ない。
0880デフォルトの名無しさん2010/11/30(火) 15:50:56
>>878
お前なんか勘違いしてるだろ

>>879
だよな、イベントでまったく不都合はない
08818782010/11/30(火) 16:15:23
コードビハインドをViewと見做すのはわかってるよ。
>>878でロジックがビューに依存すると言ったのは、VとVMの間の接続をそのままイベントに置き換えてしまった場合。
VのイベントハンドラでVMのメソッドを呼ぶようにすれば問題はないけど
それをXAMLだけでやれるようにしようとすれば、コマンドバインディングが必要になる。
0882デフォルトの名無しさん2010/11/30(火) 16:18:33
あんまりXAML側で何でもやる、というのは避けたほうがいいと思うけどなぁ。
デザインとメタデータに徹しさせて。
多国語対応するなら文字列リソースも分けないといけないし。
0883デフォルトの名無しさん2010/11/30(火) 16:26:41
あったまわりーから話の流れがつかめんが、イベントハンドラって種類によっては引数ちゃうやん?
イベントハンドラの場合、シグネチャ一緒やったらイベントハンドラ流用できっけど、シグネチャちゃうやつのイベントの場合やと
同じ処理したいって時は、いったんそいつのイベントハンドラ関数作ってからその関数内で同じ処理呼びださにゃならん。
コマンドにすりゃ、シグネチャ関係無しにどのイベントに対しても使える。って理解でOK?
0884デフォルトの名無しさん2010/11/30(火) 16:29:12
用語に酔ってる素人って事までわかった
0885デフォルトの名無しさん2010/11/30(火) 16:37:58
遅延バインドではいけないのですか?
0886デフォルトの名無しさん2010/11/30(火) 16:44:33
>>882
ユーザーコントロールとかビヘイビア作って XAML にそいつを書くってやり方すれば、
XAML 肥大化させず、かつコードビハインドにコード書く必要なくせる。

>>883
それは微妙。
イベントハンドラーの引数揃えりゃいいじゃん。
ICommand だって、パラメーター色々変えたいけどやむを得ず object 型だし。

そうでなくて、デリゲートはメソッドへの参照だというのがネックで、
XAML 化/XAML 中への記述がしにくいのよ、.NET のデリゲートの仕様的に。
0887デフォルトの名無しさん2010/11/30(火) 16:45:48
>>885
データバインディング自体が遅延バインドだけどもね。

遅延バインド/dynamic な動作は極力プログラマーの目に触れない方が安全。
だから、それをフレームワークの内側に閉じ込めて直接見えなくしてるのが WPF。
0888デフォルトの名無しさん2010/11/30(火) 17:05:14
イベントって Button.Click += this.OnClick; みたいに登録するでしょ?
つまりthisのクラスはButtonに依存するんだわ。
それをもしV-VMに置き換えたら V.Hoge += ((VM)this).OnHoge; となって
thisのクラス(VM)がVに依存してしまう。
0889デフォルトの名無しさん2010/11/30(火) 17:09:19
>>888
それも、データバインディングでイベントハンドラー登録ができれば解決したものの、
結局そこで >>886 の話になる。

XAML 中に書けるイベントハンドラー(のメソッド)はコードビハインド中のものに限られる。
ここが一番のネック。
0890デフォルトの名無しさん2010/11/30(火) 17:15:07
結論、イベントで問題なし
つまりWPFは必要ない
0891デフォルトの名無しさん2010/11/30(火) 17:19:47
>>890
XAMLとコードビハインドの関係が
イベントハンドラを介してつながるのが未だ主流、という話をしてるだけで、
誰もWPFが必要ないとは言ってないだろ。

日本語が読めないのか。
0892デフォルトの名無しさん2010/11/30(火) 17:20:00
流れ全く無視ワラタwwww
0893デフォルトの名無しさん2010/11/30(火) 17:24:36
なんか話の軸が色々あるね

・今利用者が多いの
→ コードビハインド中にイベントハンドラー直書き

・じゃあ、コマンドって?
→ イベント処理をデータバインディング使ってビューから分離するときに使う
 ここでネックになるのは、イベントだとビューから分離できない
 (ただし、ビューからの分離っての自体、アプリ規模がそこそこ大きくないと有効性低い)

・なんで Action とかでなく ICommand なの?
→ CanExecute も持たせたいから
 デリゲートの方がシリアライズしにくいから
■ このスレッドは過去ログ倉庫に格納されています