WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part7
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/08/22(日) 21:11:53Windows 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/
0310デフォルトの名無しさん
2010/11/04(木) 23:22:54スタイルとかよくわからないですがそれでやってみます
>>307
そうなんですか、まだXAMLでどこまでできるかよく把握していないので
ロジック分離するにも境界線がわかっていない感じです
>>308
動的なのかわかりませんが、ラップパネルにユーザーが文字を入力して作成ボタンを押すと
その文字が書かれたボタンが新しく追加されていくという感じです
0311デフォルトの名無しさん
2010/11/04(木) 23:27:250312デフォルトの名無しさん
2010/11/04(木) 23:29:05そういう用途なら ↓こんな感じでやる。
XAML 側
<ItemsControl ItemsSource="{Binding List}">
テンプレートで
<Button Content="{Binding}" />
C# 側(どこかで DataContext 設定)
View.DataContext = new ViewModel();
C# 側(ViewModel クラスで)
class ViewModel
{
public ObservableCollection<string> { get; set; }
}
0313デフォルトの名無しさん
2010/11/04(木) 23:29:46WPF で余裕。
データバインディングと ItemTemplate 強力。
0315305
2010/11/05(金) 19:08:31もう少しだけ細かく教えてもらえませんか?
ラップパネルにはItemsSourceもControlTemplateもないのですがどこのテンプレートですか?
それと作成ボタンが押されたらラップパネルにボタンが追加されるようにする方法もよくわかりません
Binding Listも何をバインディングしているのかもわかりませんでした
ViewModelクラスも何のために作成しているかわかりませんでした
一応こんな風にC#で作成ボタンのクリックイベントでボタンを作成するようにしてできましたが
private void button1_Click(object sender, RoutedEventArgs e)
{
Button button1 = new Button();
button1.Content = textBox1.Text;
button1.Background = new SolidColorBrush(Colors.White);
button1.Foreground = new SolidColorBrush(Colors.DarkGreen);
this.wrapPanel1.Children.Add(button1);
}
0316デフォルトの名無しさん
2010/11/05(金) 19:38:02WrapPanelは直接じゃなくてItemsControlのItemsPanelTemplateとして使う
で、この場合のテンプレートはItemsControl.ItemTemplate
> それと作成ボタンが押されたらラップパネルにボタンが追加されるようにする方法もよくわかりません
考え方が違う
A. 自分でやること
・ItemsControl,ItemsControlにObservableCollectionをバインドしておく
・必要なときにObservableCollectionに文字列を追加する
B. 勝手にされること
・ObservableCollectionはデータが追加されたことをItemsControlに通知する
・ItemsControlは増えたデータをDataTemplateをもとに作り上げた要素(ボタン)を自分に追加する
0317デフォルトの名無しさん
2010/11/05(金) 20:33:41http://ufcpp.net/misc/WpfApplication5.zip
0318305
2010/11/05(金) 21:07:11>>317
わざわざ作って頂いてありがとうございます
でもデリゲートいっぱい、ソースみても何を書いているのかよくわかりませんでした
それと起動しても追加ボタンが灰色のままで押せないのですが
今の自分にはレベルが高すぎる上、なぜこうすべきかもわからないので>>315のやり方でとりあえず妥協します
0319デフォルトの名無しさん
2010/11/05(金) 21:08:47コード中でボタン作るのはともかく、コードにColor.DarkGreenとか出てくるのはちょっといただけない
せめてStyle使いましょう
0320デフォルトの名無しさん
2010/11/05(金) 21:08:51おいこらw、セッカクつくってもらったんだから妥協してんしゃねえよ。
つかてめえデリゲートごときでなにびびってんだコラ。
0321デフォルトの名無しさん
2010/11/05(金) 21:10:370322デフォルトの名無しさん
2010/11/05(金) 21:11:150323デフォルトの名無しさん
2010/11/05(金) 21:11:270324デフォルトの名無しさん
2010/11/05(金) 21:12:100325305
2010/11/05(金) 21:23:47本当はスタイルしたいんだけど
C# コードでのstyleを作る方法が見つからなかった
XAMLでのコードはあったけど
でも、C#側で作ったボタンにXAML側で作ったスタイルを適用する
方法もわからなかったので
>>320
デリゲートはずっと避けてきてそれでもwinformsならそれなりのツールが
作れていたので、まった無知です
0326デフォルトの名無しさん
2010/11/05(金) 21:26:020327デフォルトの名無しさん
2010/11/05(金) 21:26:54データはビューから分離しとかないと、すぐに管理しきれなくなるよ。
ほんとにボタン足して終わりの単純なアプリなら >>315 で全然いいんだけど。
0328デフォルトの名無しさん
2010/11/05(金) 21:29:33リソースで Style 作っておいて、
C# 側からリソース読み出せばいい。
てか、デリゲート避けてきたって、そりゃかなり酷いぞ。
C 言語でポインターが理解できませんと同レベルにどうしようもない。
0329デフォルトの名無しさん
2010/11/05(金) 21:30:300330デフォルトの名無しさん
2010/11/05(金) 21:34:170331デフォルトの名無しさん
2010/11/05(金) 21:38:18デリゲートを簡単に書くためにラムダ式が
0332305
2010/11/05(金) 21:38:22最終的には、追加されたボタンをクリックして色反転
DATAGRIDに並べられたファイルにボタン名(タグみたいな感じ)で関連付けして
xmlで書き出して保存までやりたいです
>>328
> >>325
> リソースで Style 作っておいて、
これはできます
> C# 側からリソース読み出せばいい。
これがわかりません
> てか、デリゲート避けてきたって、そりゃかなり酷いぞ。
> C 言語でポインターが理解できませんと同レベルにどうしようもない。
C言語の例えはよくわかりませんが、デリゲート知らなくても
それなりのソフトはできてました。使う必要がなかった感じです
>>329
投げ出して一生デリゲートを学ばないと言っているわけじゃないので
試行錯誤の過程を断片的に捉えて煽るのはやめてもらえませんかね?
あなたはすぐデリゲート理解できの?
とりあえず、完成まで持っていきたいから他のアプローチを試す
ゆとりというより柔軟と言ってほしい
0333305
2010/11/05(金) 21:45:41簡単に書くというより短く書くだけで
結局、デリゲートがどういうものか理解していないと
よりわかりにくくなっただけって感じ
ラムダ式がなかったころからデリゲートを使っていた人向けで
今から始めた人向けじゃない気がする
0334デフォルトの名無しさん
2010/11/05(金) 21:47:12まあ最初はデリゲートを書きなれることかなw
0335デフォルトの名無しさん
2010/11/05(金) 21:51:060336デフォルトの名無しさん
2010/11/05(金) 21:52:360338デフォルトの名無しさん
2010/11/05(金) 21:54:590339デフォルトの名無しさん
2010/11/05(金) 21:55:370340デフォルトの名無しさん
2010/11/05(金) 21:56:08スレッドとか使うときかなあ・・・
以前C#のほかのスレででてたサンプル
http://cs2ch.blog123.fc2.com/blog-entry-84.html
0341デフォルトの名無しさん
2010/11/05(金) 21:57:22コールバック処理とかの実装どうしてんだよ。
わざわざクラスこさえて実施するとかJava上がりのバカだけだろ。
0342デフォルトの名無しさん
2010/11/05(金) 21:57:320343305
2010/11/05(金) 21:57:46そういうこと言い出す人がいると思いましたけど
わかってるでしょ?イベントハンドラは自動で作成されるし
別にデリゲートと意識しなくても使えるということを
動的にボタンを作成する場合も必要だけど
それぐらいはわかります。
とにかく>>317はボタン追加が押せないということで
間違っているところがあるんですよね?
それにあれだけ長くて難しいコードを書かなくてはいけない理由もわからない
ただ、ボタンを追加するだけなのに・・・
WPFやってみたけど、不満しかいまのところない
IDEは異常に重いし・・・ヒントの数も少ない
入力候補などが出ず手動で書かないといけないところが多い
0344デフォルトの名無しさん
2010/11/05(金) 21:58:40Comparerクラスを実装するのはデリゲートと同じだから当然理解できないだろうな
データセットとか使うんだろうか
0346デフォルトの名無しさん
2010/11/05(金) 21:59:29能力がないのを棚に上げて道具のせいとかついったーに書いてろよ
0348デフォルトの名無しさん
2010/11/05(金) 22:01:00理解できなくてすいませんでしたって土下座しろよ。
クソして寝ろ、もうくんなw
0349デフォルトの名無しさん
2010/11/05(金) 22:01:12じゃあ今は覚えなくていいよ
必要になったらここで見たな〜くらいは覚えておけば
0350デフォルトの名無しさん
2010/11/05(金) 22:01:320351デフォルトの名無しさん
2010/11/05(金) 22:03:31from n in コレクション
orderby n.プロパティ1,n.プロパティ2
select n
0352デフォルトの名無しさん
2010/11/05(金) 22:03:51スクリプト言語でちょっとした処理書くときでさえ>>344みたいなソートは使わない方が珍しいくらい
0353305
2010/11/05(金) 22:04:24WPFでは難しく長いコードになってしまうということですよ
0354デフォルトの名無しさん
2010/11/05(金) 22:05:02それデリゲート使ってるよ
0356デフォルトの名無しさん
2010/11/05(金) 22:07:07デリゲートにおける扱いは普通のメソッドと変わらん。
0357デフォルトの名無しさん
2010/11/05(金) 22:07:25エントロピー減らすためにPC使ってるんだで
0358デフォルトの名無しさん
2010/11/05(金) 22:09:050359デフォルトの名無しさん
2010/11/05(金) 22:09:52当たり前
0361デフォルトの名無しさん
2010/11/05(金) 22:11:350362デフォルトの名無しさん
2010/11/05(金) 22:12:020364デフォルトの名無しさん
2010/11/05(金) 22:13:14ビューから状態分離しなくてもテストしきれるような小規模なら、
WinForms の方法論で全然問題ないんだけどもね。
それを超えることやってないなら WPF はオーバースペックか。
0365デフォルトの名無しさん
2010/11/05(金) 22:13:34お前メクラなの?PCモニタ見るの止めれば?
0366デフォルトの名無しさん
2010/11/05(金) 22:14:36ああ、ボタン押せなくしたのはちょい蛇足。
テキスト入力されてないときに、空のテキスト追加しちゃうの?って思ったんで。
ああいう、ビュー内の状態に応じてコマンドの実行可否切り替えるとかも、
割かし GUI ではよくある要件。
0368デフォルトの名無しさん
2010/11/05(金) 22:15:24同じものWinFormsで書いてから言えば?
書いたら戻ってこなくていいけどw
0369デフォルトの名無しさん
2010/11/05(金) 22:15:520372デフォルトの名無しさん
2010/11/05(金) 22:18:28パソコンに馬鹿にされてんだよそれ
0373デフォルトの名無しさん
2010/11/05(金) 22:20:27disable になってる理由が明白な場合には disable にしてた方がいいって感じかな。
Word とかで、クリップボードに何もないときは「貼り付け」が disable になってるでしょ。
まあ、ポイントは、実行可否がコマンドの定義の部分に書かれてるってことかな。
「ボタンが押されたときに」ってやろうとすると、ボタンのイベントハンドラー内にコード書くことになるでしょ。
1つのコマンドに対して、実行と実行可否判定の場所が離れるってのはあまりよくない。
0374デフォルトの名無しさん
2010/11/05(金) 22:22:23フォーカスはずすと切り替わるはず。
キー入力のたびに切り替えたければ、
{Binding NewText} を {Binding NewText, UpdateSourceTrigger=PropertyChanged}
に書き換えて。
0375デフォルトの名無しさん
2010/11/05(金) 22:23:010376デフォルトの名無しさん
2010/11/05(金) 22:25:24なんで disable になってるのかパッと見てわからない場合は disable にせず、
実行されたときにアラート出す方がいいらしい。
でないとユーザーは「この機能は使えないものなんだ」って思うとかで。
0377305
2010/11/05(金) 23:05:40わかりやすいんだろうけど、おれのレベルだと
何を言っているのかわからない
俺はただ、追加ボタンがクリックできない状態になっている
テキスト入力しても出来ない状態
だからずっとできる状態にしてほしいの
どこをどういじればそういう風になるのかもわからないレベルなの
初心が遠く昔の人って、知識がある前提で話すからほんとわかりにくい
0378デフォルトの名無しさん
2010/11/05(金) 23:09:02あっ、ちなみに、>>316 と >>317 は別人よ。
あれじゃわかんないと思ってコード書いた。
余裕あったら説明コメントも入れたと思う。
0379デフォルトの名無しさん
2010/11/05(金) 23:14:01平伏せ下郎
0380305
2010/11/05(金) 23:21:49なんだ別人かー
わからないよね?>>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落ち着け
0382305
2010/11/05(金) 23:27:19初「コピペって何?」
上「クリップボードを中継してデータを写す作業」
初「クリップ・・何それ?」
上「クリップボードにコピーしたデータを保存して、適当な場所にペーストすることだよ」
初「いや、だからクリップってなに?コピーって?ペーストって?それってコピペの説明?」
別の上「Ctrl+C、Ctrl+Vでできる」
初「え?それってどういう意味?」(←キーボードのキーだということすらわかっていない)
今こういうのを体験した気がするわ
0383デフォルトの名無しさん
2010/11/05(金) 23:28:07すまん、正直 >>316 は最後まで読んでない。
普通に、WPF の基本ラインで実装しただけ。
まあ、WPF に慣れた人でも、現状は Forms 時代よりはだいぶ better にはなってるけど
その代償にめんどくささも幾分かあって、まだ過渡期って認識かも。
0384デフォルトの名無しさん
2010/11/06(土) 00:13:00あるある
0385305
2010/11/06(土) 00:22:25これってさプログラマにとって根幹にかかわることだと思うんだよね
自分で理解できればそれでいいってソフトを作っている人はこれでいいだろうけど
初心者でも直感的に操作できるソフトを作るというのは難しそう
現に>>317はtabでフォーカス移動しなければ使えなかった
これって初心者からしたらバグでしかない
結局機能はしょぼいけど、初心者が作った初心者のためのソフトが使いやすかったりする
上級者で初心者の気持ちもわかる人って解説サイトでも少ないよねー
0386デフォルトの名無しさん
2010/11/06(土) 00:24:58地道にいけ
0387デフォルトの名無しさん
2010/11/06(土) 00:25:52となると、「UX デザインが専門であってプログラミング詳しくない」って人がやれなきゃ意味ないのよね。
そこは WPF は「分業を推し進める」って方向に舵を切ってるわけだけども。
XAML 側は UX デザイナーが Blend とか使って作る、
プログラマーはビューには触れず、ビューモデルを作るっていう。
0388デフォルトの名無しさん
2010/11/06(土) 00:26:01拡張性0、ボタン大量、etc...
アラアラと思う…
0389デフォルトの名無しさん
2010/11/06(土) 00:27:25Binding の記述削ってたんだけど。
その結果、バグだと言われて、
一方、「C# 側がコード量多い」って言われたのはさすがにちょっとへこむ。
0390305
2010/11/06(土) 00:33:47{
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:421日でWPF使いに変身したというのに
0394デフォルトの名無しさん
2010/11/06(土) 00:47:10そういうことだ。
多くの人が使ってないんだよ、bind。
で、不意に規模が膨らんじゃってからギャップが越えられなくなる。
0395305
2010/11/06(土) 00:47:59使ったこと無いよ
ソースが変わったら、ターゲットのプロパティを書き換えるコードを書いてた
イベントハンドラ大量、更新させるためのコード
結果、ある程度の規模になると、更新一部し忘れたり、どこで更新されたかわからなくなったり
イベントハンドラが大量で一体どこで何をしているのかわからなくなった
だからそんなことにならないような簡単なユーティリティだけ作ることに
例えば、空フォルダを見つけて削除や、削除したファイルをリストアップするだけなど
ファイラーから実行できるような手軽なものを作っていた
0397デフォルトの名無しさん
2010/11/06(土) 00:51:54WinFormsでもさ…
UserControlでView作ってBindで繋げて、振る舞いはインターフェイスで定義してってやるだろ…
その辺がもうちょい賢くなって便利になったのがWPFなんだし…
0398デフォルトの名無しさん
2010/11/06(土) 00:54:200399デフォルトの名無しさん
2010/11/06(土) 00:54:59もうPythonとかスクリプト言語使えば?
君はそのほうがよっぽど幸せになれると思うよ
0400305
2010/11/06(土) 00:57:18使えるなら使うさ
俺は基本どぼんに乗っているコードをコピペすることしかできないさ
2001C# 発売当日に魔が差して買ったおれがさ
0402デフォルトの名無しさん
2010/11/06(土) 00:59:51そうなると、古い、現代的には問題が明らかになってるコードって、人類の抱える負債だなぁ。
0403デフォルトの名無しさん
2010/11/06(土) 01:00:12そういうのはコマンドラインで使えた方がどう考えても便利です
0404デフォルトの名無しさん
2010/11/06(土) 01:00:31かっこよくねぇよww
かっこいい人が作った GUI がかっこいいだけだよ。
0405デフォルトの名無しさん
2010/11/06(土) 01:03:31うーむ…
0406デフォルトの名無しさん
2010/11/06(土) 01:04:14まぁ宗教議論よりはいいか
0407305
2010/11/06(土) 01:06:09文脈理解しろよ
今作ろうとしているのは動画ソフトのフロントエンド的なものを作ろうとしているの
多分完成したら新しい時代がくる
アイデアだけはすばらしいんだよおれって
そこらのフリーソフトを超える使い易いソフトをいくつも妄想してきたが
プログラミングができない
0408デフォルトの名無しさん
2010/11/06(土) 01:09:27なんか急に口調変わったぞw騙り?w
0409デフォルトの名無しさん
2010/11/06(土) 01:12:29名前は違えどやってる事は一緒だし
■ このスレッドは過去ログ倉庫に格納されています