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/
0282デフォルトの名無しさん
2010/11/02(火) 23:18:51なんで今までと同じにしないのか理解できない。
IME使わない国には分からないのかな。
0283デフォルトの名無しさん
2010/11/03(水) 00:09:460284デフォルトの名無しさん
2010/11/03(水) 00:12:39夢見すぎだ
現実に戻ってこい
0285デフォルトの名無しさん
2010/11/03(水) 00:45:22それを知っていれば、君はおかしな事を言っていた事に気づくはず。
0286デフォルトの名無しさん
2010/11/03(水) 01:01:33ユーザーの実態に合わせないからWPFはこうなった。
どうやら未来もなさそうだ。
0287デフォルトの名無しさん
2010/11/03(水) 01:13:210288デフォルトの名無しさん
2010/11/03(水) 01:54:24自分こそが三流だと思えないとこが三流の三流たる所以
0289デフォルトの名無しさん
2010/11/03(水) 02:12:26Ctrl+A で「すべて選択」は出来るから、キーバインドはされている。
なんか理由があるのかな?
0290デフォルトの名無しさん
2010/11/03(水) 02:22:58一流の仕事なんだから間違いない。
三流は黙っとけ。
0291デフォルトの名無しさん
2010/11/03(水) 02:31:02自分でどうにかしたらいいじゃないか。
技術的に無理か?
0292デフォルトの名無しさん
2010/11/03(水) 02:37:430293デフォルトの名無しさん
2010/11/03(水) 02:40:110294デフォルトの名無しさん
2010/11/03(水) 02:55:58TextBoxのスタイルのContextMenuに満足のいくContextMenuを設定しておけよ。
もともとTextBoxのメニューなんてあんまり統一されてなかったと思うよ。
0295デフォルトの名無しさん
2010/11/03(水) 08:31:050296デフォルトの名無しさん
2010/11/03(水) 09:13:310297デフォルトの名無しさん
2010/11/03(水) 13:00:290298デフォルトの名無しさん
2010/11/03(水) 19:05:34あった >>23-28
0299デフォルトの名無しさん
2010/11/04(木) 21:37:50非同期で表示するにはどうしたらよいのか、お教えください。
private void button1_Click(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(ShowSub));
}
private void ShowSub()
{
SubWindow sub = new SubWindow();
Thread.Sleep(3000);
sub.Show();
}
こんなコードで実行すると、実行完了まで、MainWindowの操作ができなくなってしまっています。
Dispatcherの使い方が間違っているんだろう…というくらいまでは分かるのですが
それ以上わからず手じまいになってしまっています。
0300デフォルトの名無しさん
2010/11/04(木) 21:48:50SubWindowのロード処理が重いなら、とりあえず表示だけ済ませて
重いロード処理は非同期にするべき
0301デフォルトの名無しさん
2010/11/04(木) 21:50:08DispatcherにInvokeを送る=UIスレッドで実行する=時間のかかる処理はフリーズしてしまう
のです。
DispatcherPriorityを設定したからって違うスレッドで実行されるわけではないです。
フリーズしないようにするためには別のスレッドで実行するといい。
例えばThreadPool.QueueUserWorkItemとか。
でも、別のスレッドからだとUIスレッドのコントロールに触ると例外が出てしまう。
そこで使うのがDispatcher.BeginInvokeで、UIスレッドにメソッドを送りつけるわけです。
0302デフォルトの名無しさん
2010/11/04(木) 21:52:12WPFは簡単に出来たはず。
0303デフォルトの名無しさん
2010/11/04(木) 22:07:53即答ありがとうございました。
ThreadPool.QueueUserWorkItemでは STAスレッドではないということで
InvalidOperationExceptionが発生するということは
ググったり、自身で実行してみて理解していました。
自身に配置したコントロール(たとえばListBoxやTextBox)に対して
Dispatcher.BeginInvokeで非同期実行することはできていたので
Windowではなぜできないのか、悩んでおりました。
無理、という事が判明したのなら
アドバイス通り、スプラッシュやらプログレスの表示で回避するのが良策のようですね。
0304デフォルトの名無しさん
2010/11/04(木) 22:33:40非同期にやるっつったって、Dispatcher.Invoke の中で重たい処理しちゃいけないのはわかってる?
非同期開始
重たい処理
Dispatcher.Invoke
Window生成&Show
って順でやらないとダメ。
0305デフォルトの名無しさん
2010/11/04(木) 22:57:39ボタンの作成はXAMLでするの?C#で記述するの?
0306デフォルトの名無しさん
2010/11/04(木) 23:02:290307デフォルトの名無しさん
2010/11/04(木) 23:08:550308デフォルトの名無しさん
2010/11/04(木) 23:14:45データバインディングで Button.Content にテキストをバインドとかでなく?
動的に追加なら普通に C# で書くね。
0309デフォルトの名無しさん
2010/11/04(木) 23:19:43昔からそうだね
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でできる」
初「え?それってどういう意味?」(←キーボードのキーだということすらわかっていない)
今こういうのを体験した気がするわ
■ このスレッドは過去ログ倉庫に格納されています