WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part8
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/12/05(日) 22:08:33.NET4 もリリースされて盛り上がってまいりますた。
Visual Studio 2010
http://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
前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part7
http://hibari.2ch.net/test/read.cgi/tech/1282479113/
関連スレ
Microsoft Silverlight その7
http://hibari.2ch.net/test/read.cgi/tech/1288613056/
過去スレ
Part6 http://hibari.2ch.net/test/read.cgi/tech/1274423236/
Part5 http://pc12.2ch.net/test/read.cgi/tech/1261879110/
Part4 http://pc12.2ch.net/test/read.cgi/tech/1245384489/
Part3 http://pc12.2ch.net/test/read.cgi/tech/1231506876/
Part2 http://pc11.2ch.net/test/read.cgi/tech/1211453941/
Part1 http://pc11.2ch.net/test/read.cgi/tech/1162950198/
コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
0785デフォルトの名無しさん
2011/02/26(土) 00:09:44.27ContentControlとかはデフォルトだとフォーカスを受け取るから
タブ押してフォーカス移動しながらSnoopとかでフォーカスを持ってるコントロールをチェックしてみ。
0786627
2011/02/26(土) 02:11:22.84例えばWindowが持っているResourceCollectionにSolidColorBrushが入っているとして、それを子ボタンの背景に手動で適用する場合、
MyButton.Background = (Brush)MyStaticResouceExtension.ProvideValue(IServiceProvider);
ここの「IServiceProvider」にはどこのインスタンスを指定すればよいのでしょうか?
0787デフォルトの名無しさん
2011/02/26(土) 03:16:56.330789デフォルトの名無しさん
2011/02/26(土) 06:54:31.600790デフォルトの名無しさん
2011/02/26(土) 17:13:13.31タッチパネル対応箸の出番だな
0791デフォルトの名無しさん
2011/02/26(土) 18:04:38.98光学式のは厳密には触れなくても反応する。
どこまで指を上げればいいのか分からなくて慣れるまでダブルクリックできないけど。
0792デフォルトの名無しさん
2011/02/26(土) 18:08:24.110793デフォルトの名無しさん
2011/02/26(土) 23:39:43.78紹介する流れができたわけですね。
0794デフォルトの名無しさん
2011/02/27(日) 00:07:54.770795デフォルトの名無しさん
2011/02/27(日) 14:34:22.89おまいらありがとう
0796デフォルトの名無しさん
2011/02/27(日) 14:40:11.05発売から1週間経ってないのに3万とはタッチパネルも安くなったもんだな。
1台買おうかと思って製品仕様見てきた。
IPSなのはいいけどグレアパネル使ってるのか。ノングレアだったら買ってたのに…
0797デフォルトの名無しさん
2011/02/27(日) 15:36:11.56IOのもNANAOのもグレアパネルだしな……
0798デフォルトの名無しさん
2011/02/27(日) 15:37:51.250799デフォルトの名無しさん
2011/02/27(日) 15:37:55.22ただ光学式ならモニタ表面に何張ってもいいので、アンチグレアフィルムでも貼ればいい
0800デフォルトの名無しさん
2011/02/27(日) 15:39:52.580801デフォルトの名無しさん
2011/02/27(日) 15:46:44.340802デフォルトの名無しさん
2011/02/27(日) 15:49:41.08後ろを確認するのに便利とかいうから
0803デフォルトの名無しさん
2011/02/27(日) 16:41:54.67.,.‐''";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`'‐.、
,.‐´;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`‐、
,‐´;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`‐、
,l";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙'i,
,l";;;;;;;;;;;;;;;;;;;;;;;;;;;く ̄` `''=;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`゙l、
,,,,L;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`i, _,,,,、 ゙'''li;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;i、
.,i",-..,.゙ヽ;;;;;;;;;;;;;;;;;;;;;;;;l" ` .~ヽ、 ~'=i;;;;;;;;;;;;;;;;;;;;;;;;;;;;;i、
゙,l´;;;;;;l l;;;;;;;;;;;;;;;;;ノ''',,,==二^'''i、 ゙' ,、 ゙゙゙'!i;;;;;;;;;;;;;;;;;;;;|
`イ;;;;;;| |;;;;;;;;;!" ヽ,,,_ ゙゙i;;;;;;;;゙l,, i、 `゙゙ヽ、;;;;;;|
. ;;;;i´::,l";;;;;;;i" ゙ `'t;j.、ミ;;;;;;;;;`''゙;> ,l゙ ,,,,,,-''"ヾ |;;;!
. ,;;|`::,l;;;;;;;l" `'''─゙''ー--''"ノ /, .ヘ_,,,..-'ヽ,ノ;;l
'';>,l;;;;;;;;l゙ _,,,,-‐ .,,." '.ノ;;;;;;;;;;ッ-、!l;;i´
l, /;;;;;;;;i' _,,r‐‐''"` | l, ゙ミ'a .、_ッ//
. "く;;;;;;;;;| ,,,r‐'" .i. ,!:l::::`"''"//"
:',:::',゙ー-" ,,r''" ,、 ,i ,!::|::::::::::://
、゙l,::' :--、,,,, i::::|:::::::://
'゙;;,'、:: `ヽ;;;;;;;;>":::|::::://
゙、;;ヽ、::ヽ jll、,,,,,,,,,,,,,,.:'',、:::::::::::::::,,ソ"
゙、;;\:::\ `゙゙);;':::::::.,,∠-'
ヽ;;;\:::゙.、 ー-=-'''-、 ``:::::/` 用件を聞こうか
\;;`ヽ;:ヽ、 , "、:::/
\;;;"-、゙'- ,_ ノ レ'"
‐、. \;;;;`ー、;:~''ー、,,,__,,.ノ
`‐、. ヽ;;;;;;;;;゙-、l" `
゙‐、 \;;;;;;;;;;゙゙'-、
0804デフォルトの名無しさん
2011/02/27(日) 17:35:45.300805デフォルトの名無しさん
2011/02/27(日) 17:58:09.700806デフォルトの名無しさん
2011/02/27(日) 18:23:31.660807デフォルトの名無しさん
2011/02/27(日) 19:47:31.790808デフォルトの名無しさん
2011/02/27(日) 22:58:45.18CurrentColumnとCurrentItemを設定してBeginEdit()かな。
0809デフォルトの名無しさん
2011/02/28(月) 02:34:47.70アプリの設定項目としてアニメーションを無効にできるようにしたいとき、
どういうふうに書くといいのかな。コードならストーリーボードの追加・削除はわかるんだけど。
0810デフォルトの名無しさん
2011/02/28(月) 09:03:20.95細かいことはリソースディクショナリとして別のXAMLファイルに分離しておいて
スタイルを入れ替える
0811デフォルトの名無しさん
2011/02/28(月) 22:25:55.85「WPFのTextBox」
<TextBox Name="textBox1" FontSize="16" AcceptsReturn="True" FontStretch="Normal" FontFamily="MS PGothic" />
の表示に文字幅の差異が生じるのですが、どうすればWinFormと同じように表示できますか?
左がWinFormの望ましい表示で、右がWPFの文字幅がズレた表示です
http://www1.axfc.net/uploader/Img/so/108711.bmp
また、表示しているのは以下の文字列です
| | 半角で「&emsp;」、全角スペース+半角スペース
| _ | 半角スペース2個+_
| .| 全角スペース+ドット
| . | 半角スペース2個+ドット
| ~| 半角スペース+~
| | 全角スペース
| _| 半角スペース+_
| ゙| 半角スペース+゙
| .| 半角スペース+ドット
|~|
|..|
| | 半角スペース
|゙|
|.|
| | (「&thinsp;」)
0812デフォルトの名無しさん
2011/03/01(火) 00:40:23.77GDI+に強く依存した表示だから再現するのは大変。
WinFormsで作ったコントロールをホストするのが一番簡単じゃないかな。
0813デフォルトの名無しさん
2011/03/01(火) 05:03:46.42ttp://tsushima.2ch.at/s/news2ch126984.png
0814デフォルトの名無しさん
2011/03/01(火) 05:10:01.30この辺の話か
0815デフォルトの名無しさん
2011/03/01(火) 19:56:35.39別途ViewModelを作って、*.xaml.csの中身は空にするというのが。
0816デフォルトの名無しさん
2011/03/01(火) 20:00:34.160817デフォルトの名無しさん
2011/03/01(火) 20:04:04.06コードビハインドに書いてしまうとUIがくっついてくるから単体テストしづらい
VMはプレーンなクラスなので、できるだけそちらに書いておけば単体テストしやすい
それだけ
0818デフォルトの名無しさん
2011/03/01(火) 20:17:03.240819デフォルトの名無しさん
2011/03/01(火) 20:23:09.76IDialogServiceインターフェイスとか作ってDIしたりとか
かなり大掛かりな仕組みが必要になるんだよな
面倒だからといって、絶対にVMから直接ダイアログを開いたりしてはいけない
理由はとにかく「単体テストの邪魔になるから」
そこまでする気がないならMVVMなんか何の意味もないんですよ
0820デフォルトの名無しさん
2011/03/01(火) 20:31:51.53少なくとも個人ならコストかかる部分だけやる選択肢もある。
0821デフォルトの名無しさん
2011/03/01(火) 20:37:22.83バインディングは実際>>815で普通に使えるわけでMVVMのメリットではないよ
0822デフォルトの名無しさん
2011/03/01(火) 20:39:59.16相手すんのもアホらしい。
0823デフォルトの名無しさん
2011/03/01(火) 20:44:03.430824デフォルトの名無しさん
2011/03/01(火) 20:44:41.21意味がわからないうちは*.xaml.csにイベント書いたりしてていいんじゃないの?
そのうちバインド使った方がいろいろ楽できることに気がつくから
その辺が見えない人に利点を説いても無駄
0825815
2011/03/01(火) 20:50:40.46空の*.xaml.csに何の意味があるかがよくわからないという話です。
0826821
2011/03/01(火) 20:50:40.89そうじゃなくて、.xaml.csに書いたらバインディングが使えないというわけではないってこと
ビュー自身のプロパティにバインドすることも普通に可能
>>815の「なぜVMを別のクラスにするのか」という質問に対して、
「バインディングが便利だから」は回答になってないよ
0828デフォルトの名無しさん
2011/03/01(火) 20:52:57.800829デフォルトの名無しさん
2011/03/01(火) 20:55:01.51ウインドウの*.xamlに書くべきだけど書けない(またはスゲー量になる)部分をコードとしてそこに書くんだと思ってな
0830デフォルトの名無しさん
2011/03/01(火) 20:57:03.895日前から誰もバインディングの話なんかしてないが
0831デフォルトの名無しさん
2011/03/01(火) 20:57:59.23そのコード全部をテストしないといけないが、バインドをうまく利用すれば
書くコード量も減るので、自分で面倒みる部分もかなり減る
つまりバグの作りこみも減る
この辺は理屈で言ったところで納得しないだろうから
コード書けって言ってる
ネットで転がってるサンプル程度ではなくてもうちょっと大きなのを
0832デフォルトの名無しさん
2011/03/01(火) 21:02:00.82別にダイアログ呼んだっていいんだよ。それでトータルコストが浮くのなら。
正義は何だ?MVVMパターンを100%適用することか?
ちげーだろ。
0833デフォルトの名無しさん
2011/03/01(火) 21:05:36.66>正義は何だ?MVVMパターンを100%適用することか?
バインド使うことを覚えると将棋の最短手を考えるようにバインドだけで何とかできないか?
とコード減らすことばっかり考える奇妙な状態になるけどなw
それだけ便利
0834デフォルトの名無しさん
2011/03/01(火) 21:06:04.450835デフォルトの名無しさん
2011/03/01(火) 21:07:00.450836815
2011/03/01(火) 21:10:15.33バインドを使わないとか、コードビハインドで書きたいとかいっているわけではなくて、
単純になぜ*.xaml.csとは別のViewModel.csを用意するのかという話です。
*.xaml.csにバインドするプロパティやコマンドを定義しては駄目なの?、っという所が出発点です。
0837デフォルトの名無しさん
2011/03/01(火) 21:10:24.83>かなり大掛かりな仕組みが必要になる
なんてのは確かに手間考えるとどっこいな気もする
0838デフォルトの名無しさん
2011/03/01(火) 21:11:53.22ぶっちゃけIDEの仕様
0839デフォルトの名無しさん
2011/03/01(火) 21:14:48.26が一番シンプルな答えじゃないの
最初の質問で「MVVMで」って言ってるんだから
0840デフォルトの名無しさん
2011/03/01(火) 21:16:49.64バインディング使いたいだけなら別にそれでも構わない
クラスを分けるのは、単体テストのしやすさと
どうせならクラスごと分けてしまったほうが役割分担や設計がはっきりするから
0841デフォルトの名無しさん
2011/03/01(火) 21:18:48.430842デフォルトの名無しさん
2011/03/01(火) 21:21:03.160843デフォルトの名無しさん
2011/03/01(火) 21:25:15.20それくらいは最低限必要
0844デフォルトの名無しさん
2011/03/01(火) 21:27:20.520845デフォルトの名無しさん
2011/03/01(火) 21:28:57.420846デフォルトの名無しさん
2011/03/01(火) 21:31:41.490847815
2011/03/01(火) 21:32:29.19- なので、責務を考えればViewModelは別クラスにするのが当然
- InitializeComponentしかない*.xaml.csが出来ちゃうのは開発環境的な都合
- *.xaml.csが空なのは気にすんな
- 逆に、MVVM的な責務を気にしないなら、*.xaml.csにコマンドやプロパティを定義するのはあり(別にそうやりたいわけではないですが)
っという認識で合っていますでしょうか?
これで合っているのなら、自分的には納得ですが。
0848デフォルトの名無しさん
2011/03/01(火) 21:33:33.59・インターフェイスを被せておいて、その実装クラスでダイアログ開く。VMからはインターフェイス経由で扱う。
ファイルダイアログなら後者のほうがいいと思う
特定のビューでしか使わないダイアログなら前者でもおk
0849デフォルトの名無しさん
2011/03/01(火) 21:36:42.17>InitializeComponentしかない*.xaml.cs
もしかしてXAMLでイベントハンドラを指定すれば
*.xaml.csにイベントハンドラのコード部分がかかれるんだが・・・
*.xaml.csってWinFormでいうところのForm1.csと同等に扱えるぞ
*.xamlはWinFormでいうところのデザイナーが勝手に書き換えするやつ(名前忘れた)と同等
0850デフォルトの名無しさん
2011/03/01(火) 21:45:09.94Modelに関係ない、純粋にViewでしか使わないようなプロパティばかりだからViewModelに
書くってのはなんか違うような気もするし。
0851デフォルトの名無しさん
2011/03/01(火) 21:46:43.42コードビハインド側で名前を頼りにWinFormのころのようにコードを
ごりごり書くってやり方も可能なんだが、そういうのもよくわかってないのかな?
0852デフォルトの名無しさん
2011/03/01(火) 21:53:19.86>Modelに関係ない、純粋にViewでしか使わないようなプロパティ
ViewModelはそういうのを置くための場所
ViewModelはModelのラッパーじゃなくて文字通りViewのModelなんだよ
0853815
2011/03/01(火) 21:54:38.29いや、さすがにそれは分かっています。
*.xaml.csが空と言っているのは、VMを作ってコマンドやプロパティを定義したり、
Blendでビヘイビアとか使えば*.xaml.csってほとんど空になりますよね、っという話です。
0854デフォルトの名無しさん
2011/03/01(火) 21:57:58.54そうだよ
WinFormのころはForm1.csにごりごり書いてたビュー関連の
コードを書く必要がなくなる仕組みがあるんだからw
だから何?って話だけど
0855デフォルトの名無しさん
2011/03/01(火) 22:00:05.32なるほど。
あとはコードビハインドなら初めから依存プロパティを宣言できるってのもある。
ViewModelでもDependencyObjectを継承すればいいけど、ネット上で見つかるViewModel
の実装はなぜかINotifyPropertyChangedの方ばかりだね。
0856デフォルトの名無しさん
2011/03/01(火) 22:04:27.17モデルが特定の実装技術に依存するのは糞
っていうのが最近の流行りだから
POCOってやつ
0857デフォルトの名無しさん
2011/03/01(火) 22:15:36.30もうちょっと手抜きさせてもらえないのかねw
微妙に定型をまいど書くのがなんかしっくりこないw
0858デフォルトの名無しさん
2011/03/01(火) 23:58:53.470859デフォルトの名無しさん
2011/03/02(水) 00:06:49.040860デフォルトの名無しさん
2011/03/02(水) 00:19:55.42使わなくても作れる。
0861デフォルトの名無しさん
2011/03/02(水) 01:09:07.600862デフォルトの名無しさん
2011/03/02(水) 01:18:11.85ViewModelではなんで使わないの?>>856のいうモデルとは違うだろうし。
0863デフォルトの名無しさん
2011/03/02(水) 03:22:05.38Style.Triggersはいろんなトリガ使える。
FrameworkElement.TriggersはEventTriggerだけ。
このへんの関係がよくわからん。EventTriggerでXAML内でさくっとプロパティ値変えたいのに、
それはハンドラでやれってか。
0864デフォルトの名無しさん
2011/03/02(水) 04:58:17.45最初からViewModelも作るのは不必要な抽象化だと思うし
既存コードを再利用する必要があるとかでない限り
ViewModelには依存プロパティすればいいと思う
0865デフォルトの名無しさん
2011/03/02(水) 07:13:23.79テストに大きな影響は無いと思うんだが。
0866デフォルトの名無しさん
2011/03/02(水) 09:35:53.69トリガは過去の遺物
VisualStateManagerを使う
0867デフォルトの名無しさん
2011/03/02(水) 17:03:22.24じゃあアニメーションはそれでやる。
イベントに対して(他の要素の)プロパティを変えるのはやっぱコードからしかないか。
ようやくXAMLでできる動的なことの限界が見えてきた気がする。
0868デフォルトの名無しさん
2011/03/02(水) 19:41:03.74一瞬で終わる離散キーフレームのアニメーションにする
0869デフォルトの名無しさん
2011/03/02(水) 20:15:51.25してる状態なので、アニメーションを削除しないとその値は有効にならない。
アニメ化したいプロパティはユーザーの希望でアニメーション無効にしてても、
実装自体は終始アニメーションで固めてしまったほうがいいってことかなあ。
0870デフォルトの名無しさん
2011/03/03(木) 00:52:02.94Blend使うとそんな感じになる
論理的な状態の変化はVMかコードビハインドで
0871デフォルトの名無しさん
2011/03/04(金) 15:29:43.000872デフォルトの名無しさん
2011/03/04(金) 15:30:56.19え・・・
そんなに難しくはないだろ
0873デフォルトの名無しさん
2011/03/04(金) 15:43:45.76やっぱBlend依存でやるしかないのかな?
どうもBlendいやなんだよな・・・
0874デフォルトの名無しさん
2011/03/04(金) 17:16:29.680875デフォルトの名無しさん
2011/03/05(土) 22:13:21.54画像にぼかしかけたり、モザイクとアニメーションを同時にやるとか
そういうのは結構難しいんだよな
0876デフォルトの名無しさん
2011/03/05(土) 22:16:00.80XAMLだけでやろうとしなければそれほどでもなくね?
一旦コードビハインド側でコード書いてXAMLに直せそうならやってみればいいし
0877デフォルトの名無しさん
2011/03/05(土) 22:16:06.68仕組みが分かれば超簡単でクソ速い
0878デフォルトの名無しさん
2011/03/05(土) 22:21:06.22Effectじゃだめじょん?
0879デフォルトの名無しさん
2011/03/05(土) 22:23:02.88http://wpffx.codeplex.com/
ピクセルシェーダのサンプル
0880デフォルトの名無しさん
2011/03/06(日) 08:30:27.44Blend 使えば簡単なんだけどね。
Visual Studio のライセンスで Blend 自由に使えればいいのに・・・
0881デフォルトの名無しさん
2011/03/06(日) 08:33:51.09実行するかどうかはあなた次第
というかそんなに難しいか?
というかそういうtipsサイトってないのかな?
みんなツール依存なの?
0882デフォルトの名無しさん
2011/03/06(日) 16:37:22.47Windowクローズするならイベントハンドラにしないと無理そうなんだと思うんですが、どうよ?
0883デフォルトの名無しさん
2011/03/06(日) 16:45:25.31きっちりMVVM的にやるなら、
PrismのInteractionRequestなりMVVM LightのMessengerなりつかって
VMからViewへメッセージ投げるべき。
View 内に完結してやるにしても、
Button.Click とかのイベントハンドラーで Close() するのはいまいちで、
Button.Command に ApplicationCommands.Close を指定した上で、
CommandBindings で Close() する方がいいと思う。
0884デフォルトの名無しさん
2011/03/06(日) 17:01:13.76インターフェイスを使うのもアリ
interface IWindowService {
void CloseWindow(string windowName);
void ShowWindow(string windowName);
}
例えばこういうのを実装してViewModelのIWindowService型のプロパティに渡しておく
これだとウィンドウ剥き出しすぎるからもうちょっと抽象的な名前のほうがいいかもしれん
メッセージよりはわかりやすくて使い回しも利く
■ このスレッドは過去ログ倉庫に格納されています