トップページ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/
0317デフォルトの名無しさん2010/11/05(金) 20:33:41
>>316
http://ufcpp.net/misc/WpfApplication5.zip
03183052010/11/05(金) 21:07:11
>>316
>>317
わざわざ作って頂いてありがとうございます
でもデリゲートいっぱい、ソースみても何を書いているのかよくわかりませんでした
それと起動しても追加ボタンが灰色のままで押せないのですが

今の自分にはレベルが高すぎる上、なぜこうすべきかもわからないので>>315のやり方でとりあえず妥協します
0319デフォルトの名無しさん2010/11/05(金) 21:08:47
>>315
コード中でボタン作るのはともかく、コードにColor.DarkGreenとか出てくるのはちょっといただけない
せめてStyle使いましょう
0320デフォルトの名無しさん2010/11/05(金) 21:08:51
>>318
おいこらw、セッカクつくってもらったんだから妥協してんしゃねえよ。
つかてめえデリゲートごときでなにびびってんだコラ。
0321デフォルトの名無しさん2010/11/05(金) 21:10:37
はは、まぁ作った奴からすればちょっと悲しいよなw
0322デフォルトの名無しさん2010/11/05(金) 21:11:15
柄の悪いインタネッツですね
0323デフォルトの名無しさん2010/11/05(金) 21:11:27
デリケートは昔でいうgotoだから使う奴は初級者
0324デフォルトの名無しさん2010/11/05(金) 21:12:10
昔で言うgotoは例外ですよ
03253052010/11/05(金) 21:23:47
>>319
本当はスタイルしたいんだけど
C# コードでのstyleを作る方法が見つからなかった
XAMLでのコードはあったけど
でも、C#側で作ったボタンにXAML側で作ったスタイルを適用する
方法もわからなかったので

>>320
デリゲートはずっと避けてきてそれでもwinformsならそれなりのツールが
作れていたので、まった無知です
0326デフォルトの名無しさん2010/11/05(金) 21:26:02
ParallelsとかTaskとかデリゲートだらけに進化してます
0327デフォルトの名無しさん2010/11/05(金) 21:26:54
>>318
データはビューから分離しとかないと、すぐに管理しきれなくなるよ。

ほんとにボタン足して終わりの単純なアプリなら >>315 で全然いいんだけど。
0328デフォルトの名無しさん2010/11/05(金) 21:29:33
>>325
リソースで Style 作っておいて、
C# 側からリソース読み出せばいい。

てか、デリゲート避けてきたって、そりゃかなり酷いぞ。
C 言語でポインターが理解できませんと同レベルにどうしようもない。
0329デフォルトの名無しさん2010/11/05(金) 21:30:30
わからなきゃ投げ出すとか、ほんとゆとりだな
0330デフォルトの名無しさん2010/11/05(金) 21:34:17
デレゲートとラムダ式の違いがよくわからんかったな
0331デフォルトの名無しさん2010/11/05(金) 21:38:18
デリゲートね
デリゲートを簡単に書くためにラムダ式が
03323052010/11/05(金) 21:38:22
>>327
最終的には、追加されたボタンをクリックして色反転
DATAGRIDに並べられたファイルにボタン名(タグみたいな感じ)で関連付けして
xmlで書き出して保存までやりたいです




>>328
> >>325
> リソースで Style 作っておいて、
これはできます
> C# 側からリソース読み出せばいい。
これがわかりません

> てか、デリゲート避けてきたって、そりゃかなり酷いぞ。
> C 言語でポインターが理解できませんと同レベルにどうしようもない。
C言語の例えはよくわかりませんが、デリゲート知らなくても
それなりのソフトはできてました。使う必要がなかった感じです

>>329
投げ出して一生デリゲートを学ばないと言っているわけじゃないので
試行錯誤の過程を断片的に捉えて煽るのはやめてもらえませんかね?
あなたはすぐデリゲート理解できの?
とりあえず、完成まで持っていきたいから他のアプローチを試す
ゆとりというより柔軟と言ってほしい
03333052010/11/05(金) 21:45:41
>>331
簡単に書くというより短く書くだけで
結局、デリゲートがどういうものか理解していないと
よりわかりにくくなっただけって感じ
ラムダ式がなかったころからデリゲートを使っていた人向けで
今から始めた人向けじゃない気がする
0334デフォルトの名無しさん2010/11/05(金) 21:47:12
そうだね
まあ最初はデリゲートを書きなれることかなw
0335デフォルトの名無しさん2010/11/05(金) 21:51:06
イベントには便利だな
0336デフォルトの名無しさん2010/11/05(金) 21:52:36
というかC#のイベントはデリゲートで実装してるんじゃないの?
03373052010/11/05(金) 21:52:50
>>334
でも、使う場面がないですよ?
あらゆるサイトでデリゲートの説明していますが
デリゲートって便利だなと思ったものは1つもない
0338デフォルトの名無しさん2010/11/05(金) 21:54:59
おまえはイベントを書く時にどうやってるんだよ…
0339デフォルトの名無しさん2010/11/05(金) 21:55:37
いろんなとこから呼ばれる非同期処理とか
0340デフォルトの名無しさん2010/11/05(金) 21:56:08
>>337
スレッドとか使うときかなあ・・・

以前C#のほかのスレででてたサンプル
http://cs2ch.blog123.fc2.com/blog-entry-84.html
0341デフォルトの名無しさん2010/11/05(金) 21:57:22
>>337
コールバック処理とかの実装どうしてんだよ。
わざわざクラスこさえて実施するとかJava上がりのバカだけだろ。
0342デフォルトの名無しさん2010/11/05(金) 21:57:32
LINQにメソッド渡すのは嫌ずら
03433052010/11/05(金) 21:57:46
>>336
そういうこと言い出す人がいると思いましたけど
わかってるでしょ?イベントハンドラは自動で作成されるし
別にデリゲートと意識しなくても使えるということを

動的にボタンを作成する場合も必要だけど
それぐらいはわかります。

とにかく>>317はボタン追加が押せないということで
間違っているところがあるんですよね?
それにあれだけ長くて難しいコードを書かなくてはいけない理由もわからない
ただ、ボタンを追加するだけなのに・・・
WPFやってみたけど、不満しかいまのところない
IDEは異常に重いし・・・ヒントの数も少ない
入力候補などが出ず手動で書かないといけないところが多い
0344デフォルトの名無しさん2010/11/05(金) 21:58:40
コレクションを要素の型の特定のプロパティでソートしたいときはデリゲート使わないでどうやるんだろう
Comparerクラスを実装するのはデリゲートと同じだから当然理解できないだろうな
データセットとか使うんだろうか
03453052010/11/05(金) 21:59:22
>>339
>>340
>>341
そういうのをしたい、必要と思ったことはありません
その程度の小規模なツール作っているだけなんで
0346デフォルトの名無しさん2010/11/05(金) 21:59:29
ふーん
能力がないのを棚に上げて道具のせいとかついったーに書いてろよ
03473052010/11/05(金) 22:00:18
>>344
そんなソートをしたいと思ったことがないですね
0348デフォルトの名無しさん2010/11/05(金) 22:01:00
>>345
理解できなくてすいませんでしたって土下座しろよ。
クソして寝ろ、もうくんなw
0349デフォルトの名無しさん2010/11/05(金) 22:01:12
>>345
じゃあ今は覚えなくていいよ
必要になったらここで見たな〜くらいは覚えておけば
0350デフォルトの名無しさん2010/11/05(金) 22:01:32
視野が狭い自慢?
0351デフォルトの名無しさん2010/11/05(金) 22:03:31
>>344
from n in コレクション
orderby n.プロパティ1,n.プロパティ2
select n
0352デフォルトの名無しさん2010/11/05(金) 22:03:51
他に出たのはともかくとして>>344がいらないって一体何作ってるんだろ
スクリプト言語でちょっとした処理書くときでさえ>>344みたいなソートは使わない方が珍しいくらい
03533052010/11/05(金) 22:04:24
winformsで簡単で短いコードでできることを
WPFでは難しく長いコードになってしまうということですよ
0354デフォルトの名無しさん2010/11/05(金) 22:05:02
>>351
それデリゲート使ってるよ
03553052010/11/05(金) 22:06:34
>>352
コレクションのソート使わない方が沢山あるでしょ
0356デフォルトの名無しさん2010/11/05(金) 22:07:07
ラムダ式はいわば簡単にかけるメソッドでしょ
デリゲートにおける扱いは普通のメソッドと変わらん。
0357デフォルトの名無しさん2010/11/05(金) 22:07:25
ソート使わないプログラムの方が少ないでよ
エントロピー減らすためにPC使ってるんだで
0358デフォルトの名無しさん2010/11/05(金) 22:09:05
>>355もういいから涙拭いて布団に入れよ。
0359デフォルトの名無しさん2010/11/05(金) 22:09:52
WinFormsの方が短く書けるってのはWinFormsの方法論でWPF書いてるからですよ
当たり前
03603052010/11/05(金) 22:11:28
てか>>315の何がだめなの?
他の人も言ってたじゃない
追加するならC#で書くってさ
0361デフォルトの名無しさん2010/11/05(金) 22:11:35
俺は半分オナヌー用途だが
0362デフォルトの名無しさん2010/11/05(金) 22:12:02
ウィンホームズの方が他の言語に活かせる学び方ができる
03633052010/11/05(金) 22:13:03
>>359
じゃあ>>317はなぜ長いか説明してよ
追加ボタン押せないのはなぜか教えてよ
0364デフォルトの名無しさん2010/11/05(金) 22:13:14
まあ、実際、値の変更通知を手動で管理しきれて、
ビューから状態分離しなくてもテストしきれるような小規模なら、
WinForms の方法論で全然問題ないんだけどもね。

それを超えることやってないなら WPF はオーバースペックか。
0365デフォルトの名無しさん2010/11/05(金) 22:13:34
>>327辺りが言ってると思うが
お前メクラなの?PCモニタ見るの止めれば?
0366デフォルトの名無しさん2010/11/05(金) 22:14:36
>>363
ああ、ボタン押せなくしたのはちょい蛇足。
テキスト入力されてないときに、空のテキスト追加しちゃうの?って思ったんで。

ああいう、ビュー内の状態に応じてコマンドの実行可否切り替えるとかも、
割かし GUI ではよくある要件。
03673052010/11/05(金) 22:14:52
>>365
具体的に
0368デフォルトの名無しさん2010/11/05(金) 22:15:24
>>363
同じものWinFormsで書いてから言えば?
書いたら戻ってこなくていいけどw
0369デフォルトの名無しさん2010/11/05(金) 22:15:52
ヒートアップしてきたな。
03703052010/11/05(金) 22:15:58
>>366
ボタン押された場合にトリガー発動させて
ボタン追加じゃだめなの?
03713052010/11/05(金) 22:17:32
>>366
文字入力してもボタン押せない状態なんだけど?
0372デフォルトの名無しさん2010/11/05(金) 22:18:28
>>371
パソコンに馬鹿にされてんだよそれ
0373デフォルトの名無しさん2010/11/05(金) 22:20:27
>>370
disable になってる理由が明白な場合には disable にしてた方がいいって感じかな。
Word とかで、クリップボードに何もないときは「貼り付け」が disable になってるでしょ。

まあ、ポイントは、実行可否がコマンドの定義の部分に書かれてるってことかな。
「ボタンが押されたときに」ってやろうとすると、ボタンのイベントハンドラー内にコード書くことになるでしょ。
1つのコマンドに対して、実行と実行可否判定の場所が離れるってのはあまりよくない。
0374デフォルトの名無しさん2010/11/05(金) 22:22:23
>>371
フォーカスはずすと切り替わるはず。
キー入力のたびに切り替えたければ、
{Binding NewText} を {Binding NewText, UpdateSourceTrigger=PropertyChanged}
に書き換えて。
0375デフォルトの名無しさん2010/11/05(金) 22:23:01
機械の分際で>>305様に楯突くなんて!
0376デフォルトの名無しさん2010/11/05(金) 22:25:24
ちなみに、>>372 の補足。

なんで disable になってるのかパッと見てわからない場合は disable にせず、
実行されたときにアラート出す方がいいらしい。
でないとユーザーは「この機能は使えないものなんだ」って思うとかで。
03773052010/11/05(金) 23:05:40
>>316さんの説明はある一定の知識のある人には丁寧で
わかりやすいんだろうけど、おれのレベルだと
何を言っているのかわからない
俺はただ、追加ボタンがクリックできない状態になっている
テキスト入力しても出来ない状態
だからずっとできる状態にしてほしいの
どこをどういじればそういう風になるのかもわからないレベルなの

初心が遠く昔の人って、知識がある前提で話すからほんとわかりにくい
0378デフォルトの名無しさん2010/11/05(金) 23:09:02
>>377
あっ、ちなみに、>>316>>317 は別人よ。
あれじゃわかんないと思ってコード書いた。
余裕あったら説明コメントも入れたと思う。
0379デフォルトの名無しさん2010/11/05(金) 23:14:01
オラオラ、初心者様の御通りだぞ
平伏せ下郎
03803052010/11/05(金) 23:21:49
>>378
なんだ別人かー
わからないよね?>>316の説明だと
一応これに近いことなのかなと思ってみていたけどよくわからなかった
●コレクション・オブジェクトへのバインド
http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_02/uiframework_02_04.html

>A. 自分でやること
自分?何が自分?おれのこと?ユーザー?

>B. 勝手にされること
誰が勝手にするの?
>ObservableCollectionはデータが追加されたことをItemsControlに通知する
このやり方がわからないんですけど。

そもそも何の説明?
もうまったくわかんなかった
例えると、ため口の説明を同じ内容でただ敬語で説明されただけって感じ。

>>317>>316の説明の通りにしたソースだよね?
いつかわかる日が来た時のために永久保存しておきます
0381デフォルトの名無しさん2010/11/05(金) 23:24:39
まだやってるのか
落ち着け
03823052010/11/05(金) 23:27:19
パソコン今日届いて初めて触る人にコピペを教えるようなもの

初「コピペって何?」
上「クリップボードを中継してデータを写す作業」
初「クリップ・・何それ?」
上「クリップボードにコピーしたデータを保存して、適当な場所にペーストすることだよ」
初「いや、だからクリップってなに?コピーって?ペーストって?それってコピペの説明?」
別の上「Ctrl+C、Ctrl+Vでできる」
初「え?それってどういう意味?」(←キーボードのキーだということすらわかっていない)

今こういうのを体験した気がするわ
0383デフォルトの名無しさん2010/11/05(金) 23:28:07
>>380
すまん、正直 >>316 は最後まで読んでない。
普通に、WPF の基本ラインで実装しただけ。

まあ、WPF に慣れた人でも、現状は Forms 時代よりはだいぶ better にはなってるけど
その代償にめんどくささも幾分かあって、まだ過渡期って認識かも。
0384デフォルトの名無しさん2010/11/06(土) 00:13:00
>>382
あるある
03853052010/11/06(土) 00:22:25
>>382
これってさプログラマにとって根幹にかかわることだと思うんだよね
自分で理解できればそれでいいってソフトを作っている人はこれでいいだろうけど
初心者でも直感的に操作できるソフトを作るというのは難しそう

現に>>317はtabでフォーカス移動しなければ使えなかった
これって初心者からしたらバグでしかない

結局機能はしょぼいけど、初心者が作った初心者のためのソフトが使いやすかったりする
上級者で初心者の気持ちもわかる人って解説サイトでも少ないよねー
0386デフォルトの名無しさん2010/11/06(土) 00:24:58
しょぼいのでいい
地道にいけ
0387デフォルトの名無しさん2010/11/06(土) 00:25:52
実際でもなぁ、それは UX デザインを専門にやってる人に任せたいというのが本音。
となると、「UX デザインが専門であってプログラミング詳しくない」って人がやれなきゃ意味ないのよね。

そこは WPF は「分業を推し進める」って方向に舵を切ってるわけだけども。
XAML 側は UX デザイナーが Blend とか使って作る、
プログラマーはビューには触れず、ビューモデルを作るっていう。
0388デフォルトの名無しさん2010/11/06(土) 00:26:01
初心者が作ったソフトは使いにくいです
拡張性0、ボタン大量、etc...
アラアラと思う…
0389デフォルトの名無しさん2010/11/06(土) 00:27:25
というか、 >>317 は、コード少ない方が理解しやすいかなって思って
Binding の記述削ってたんだけど。

その結果、バグだと言われて、
一方、「C# 側がコード量多い」って言われたのはさすがにちょっとへこむ。
03903052010/11/06(土) 00:33:47
private void button1_Click(object sender, RoutedEventArgs e)
{
Button button1 = new Button();
button1.Content = textBox1.Text;
this.wrapPanel1.Children.Add(button1);
}

だってさ、初心者でもたったこれだけでできることを
上級者がXAMLでやると、デリゲートだとか、バインドがあっちこっちにあったりして
どうしてそうなっちゃうの?って感じ
0391デフォルトの名無しさん2010/11/06(土) 00:37:01
たいていそれだけで要件収まらないから。
いいのよ、別に、ほんとにそれだけの要件ならそれで。
0392デフォルトの名無しさん2010/11/06(土) 00:40:42
コードの小分けが出来るのがいい
というかさ、winformsでもbind使ってたろ?
使ってなかったのか?もしかして…
0393デフォルトの名無しさん2010/11/06(土) 00:46:42
先日の初心者スレの人はブーブー言いつつ皆に熱心に諭され勉強し、
1日でWPF使いに変身したというのに
0394デフォルトの名無しさん2010/11/06(土) 00:47:10
>>392
そういうことだ。
多くの人が使ってないんだよ、bind。

で、不意に規模が膨らんじゃってからギャップが越えられなくなる。
03953052010/11/06(土) 00:47:59
>>392
使ったこと無いよ
ソースが変わったら、ターゲットのプロパティを書き換えるコードを書いてた
イベントハンドラ大量、更新させるためのコード

結果、ある程度の規模になると、更新一部し忘れたり、どこで更新されたかわからなくなったり
イベントハンドラが大量で一体どこで何をしているのかわからなくなった

だからそんなことにならないような簡単なユーティリティだけ作ることに
例えば、空フォルダを見つけて削除や、削除したファイルをリストアップするだけなど
ファイラーから実行できるような手軽なものを作っていた
03963052010/11/06(土) 00:49:34
>>393
それおれだから
WPF使いじゃなくてWPF始めただけだからw
0397デフォルトの名無しさん2010/11/06(土) 00:51:54
いやいや、Bind使おうよ…
WinFormsでもさ…
UserControlでView作ってBindで繋げて、振る舞いはインターフェイスで定義してってやるだろ…
その辺がもうちょい賢くなって便利になったのがWPFなんだし…
0398デフォルトの名無しさん2010/11/06(土) 00:54:20
イベント直書きは10年前のdelphiでもうこりごり
0399デフォルトの名無しさん2010/11/06(土) 00:54:59
>>395
もうPythonとかスクリプト言語使えば?
君はそのほうがよっぽど幸せになれると思うよ
04003052010/11/06(土) 00:57:18
>>397
使えるなら使うさ
俺は基本どぼんに乗っているコードをコピペすることしかできないさ
2001C# 発売当日に魔が差して買ったおれがさ
04013052010/11/06(土) 00:59:13
>>399
Python、Rubyとかもやったよ
でもやっぱ、GUIのかっこいいの作りたいじゃない?
0402デフォルトの名無しさん2010/11/06(土) 00:59:51
うーん、コピペ自体は悪いとは言わないんだけどね。
そうなると、古い、現代的には問題が明らかになってるコードって、人類の抱える負債だなぁ。
0403デフォルトの名無しさん2010/11/06(土) 01:00:12
空フォルダを見つけて削除するGUIユーティリティ?w
そういうのはコマンドラインで使えた方がどう考えても便利です
0404デフォルトの名無しさん2010/11/06(土) 01:00:31
>>401
かっこよくねぇよww
かっこいい人が作った GUI がかっこいいだけだよ。
0405デフォルトの名無しさん2010/11/06(土) 01:03:31
こういう技術の根底にある考え方って敷居高いのかなぁ
うーむ…
0406デフォルトの名無しさん2010/11/06(土) 01:04:14
スレがのびてると思ったら…
まぁ宗教議論よりはいいか
04073052010/11/06(土) 01:06:09
>>403
文脈理解しろよ
今作ろうとしているのは動画ソフトのフロントエンド的なものを作ろうとしているの
多分完成したら新しい時代がくる

アイデアだけはすばらしいんだよおれって
そこらのフリーソフトを超える使い易いソフトをいくつも妄想してきたが
プログラミングができない
0408デフォルトの名無しさん2010/11/06(土) 01:09:27
>>407
なんか急に口調変わったぞw騙り?w
0409デフォルトの名無しさん2010/11/06(土) 01:12:29
他の言語でもフレームワーク触った事あるならすぐ理解出来ると思うけどね
名前は違えどやってる事は一緒だし
0410デフォルトの名無しさん2010/11/06(土) 01:20:14
ただでも、でかいフレームワークだと、その裏にある要求とかモデルとかを簡潔に説明した文章って少ないからねぇ。
0411デフォルトの名無しさん2010/11/06(土) 02:53:26
WPFがダメなのはIDEの至れり尽くせりサポート大前提で設計してるくせに
肝心のサポートが話にならないチープさなところ
こう書くと老害が「HTMLだって手書きでやってきた」とかほざくんだがナンセンス
今時のCSS&JavaScriptごちゃごちゃに入り交じってる案件メモ帳でやってみろってんだ
0412デフォルトの名無しさん2010/11/06(土) 02:57:54
Blendは敷居高いと思うが
windowsFormで作る程度のならVisualStudioでドラッグ&ドロップで行けるだろ
0413デフォルトの名無しさん2010/11/06(土) 04:02:01
>>411
こういうの見ると
あぁ、この人ってWPF使った事ないのに批判してるんだな と哀れに思うわ。

実際は>>412なのにまるで分かってない。
0414デフォルトの名無しさん2010/11/06(土) 04:04:14
否定だけなら子供でもできる
反論があるなら根拠を述べよ
0415デフォルトの名無しさん2010/11/06(土) 04:05:49
>>414
日本語がわからないとは
0416デフォルトの名無しさん2010/11/06(土) 07:30:20
>>411のほうが老害くさいよな
どうせVB6のクラサバみたいなのしか作ったこと無いくせにw
■ このスレッドは過去ログ倉庫に格納されています