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/
0486デフォルトの名無しさん
2010/12/30(木) 12:22:110487デフォルトの名無しさん
2010/12/30(木) 12:28:38他にもパスでお絵描したりとか、そういう完全にデザインな部分だけに
特化したツールとして分離したほうがいいんじゃないかと思う
ビヘイビアとか完全にプログラミングだし、ごっちゃごちゃな印象
0488デフォルトの名無しさん
2010/12/30(木) 12:40:07なかったら誰か作って!
アフィ貼りまくってくれていいから
0489デフォルトの名無しさん
2010/12/30(木) 12:53:29の間違いじゃね?
0490デフォルトの名無しさん
2010/12/30(木) 14:44:15Quaternion xz = new Quaternion(new Vector3D(1, 0, 1), degreexz);
A.Rotate(xz);
回転角degreexz[°]でXZ軸でAを回転させたいのですが、どこがおかしいでしょうか。ご指南お願いします。
0491デフォルトの名無しさん
2010/12/30(木) 14:47:150492デフォルトの名無しさん
2010/12/30(木) 20:40:08Silverlighgtスレかと思ったら違うようだし、
他にXAML/WPfの話題のスレってあったっけ?
0493デフォルトの名無しさん
2010/12/30(木) 21:21:21>481 名前: デフォルトの名無しさん [sage] 投稿日: 2010/12/30(木) 14:45:16
>回転が出来ません!
>Quaternion xz = new Quaternion(new Vector3D(1, 0, 1), degreexz);
>A.Rotate(xz);
>回転角degreexz[°]でXZ軸でAを回転させたいのですが、どこがおかしいでしょうか。ご指南お願いします。
0494デフォルトの名無しさん
2010/12/31(金) 10:27:000495デフォルトの名無しさん
2010/12/31(金) 10:46:32生産性が良くなるとも思えんし。UIとロジックの分離なんて設計次第だろ。
0496デフォルトの名無しさん
2010/12/31(金) 10:51:080497デフォルトの名無しさん
2010/12/31(金) 11:21:200498デフォルトの名無しさん
2010/12/31(金) 11:25:34自由度が高くなっても必要としていない人には関係ない。
0499デフォルトの名無しさん
2010/12/31(金) 13:30:340500デフォルトの名無しさん
2010/12/31(金) 13:45:01めんどくさいから全部でいいよ
0501デフォルトの名無しさん
2010/12/31(金) 13:55:12DirectX使えば普通にできるが?
0502デフォルトの名無しさん
2010/12/31(金) 13:57:400503デフォルトの名無しさん
2010/12/31(金) 14:36:540504デフォルトの名無しさん
2010/12/31(金) 14:43:010505デフォルトの名無しさん
2010/12/31(金) 15:34:090506デフォルトの名無しさん
2010/12/31(金) 16:05:550507デフォルトの名無しさん
2010/12/31(金) 16:11:28失礼しました
0508デフォルトの名無しさん
2010/12/31(金) 21:09:43ボタンの中にチェックボックスを入れてそれをマルチ選択可能なリストボックスに入れるとか
アホなことがし放題。フリーダム!!
もはやどう動くのか想像もつかない状態になるがなw
0509デフォルトの名無しさん
2011/01/03(月) 08:38:52まだ未完成じゃないか(シルバーライトバージョンはちゃんとしているみたい)
0510デフォルトの名無しさん
2011/01/03(月) 10:25:25気に入らなかったらWinFormsのWebBrowserをWindowsFormsHostで使えばいい
どっちを使おうが空域問題は避けられなくて
SilverlightのようにWebページをパズルにしたりはできない
0511デフォルトの名無しさん
2011/01/03(月) 21:12:30中央に固定位置で表示させるのはTextBlockを2つ(Value値と"%"で2つ)使ってできたのですが
ProgressBar.Widthが変化したときにも自動で中央にする方法が分かりません。
お願いします。
0512デフォルトの名無しさん
2011/01/03(月) 21:52:09?
何をお願いしたいのか微塵たりとも分からないし、情報が足りなすぎるが
適当なコントロールにHorizontalAlignmentを設定すればいいじゃないか。
あとTextBlockはネストできるし、BindにはStringFormatを指定できる。
0513デフォルトの名無しさん
2011/01/04(火) 23:36:07ViewModelやModelのプロパティ更新時のエラーはIDataErrorInfoを使用してViewに通知するのはいろんなhpを見て分かったのですが
ICommand.Executeでのエラー通知はどうやるのがMVVMパターンなのでしょうか・・・
今のところViewModelにCommandエラー通知専用のプロパティを作ってバインドしてViewに知らせています
0514デフォルトの名無しさん
2011/01/04(火) 23:40:33通知というよりViewModelにHasErrorとかErrorMessageとかプロパティ定義してバインドするだけ
ダイアログ出したかったらInteractionRequestでググる
0515デフォルトの名無しさん
2011/01/05(水) 00:31:16英語だけどこれ以上の情報はないと思う
0516デフォルトの名無しさん
2011/01/05(水) 18:26:38お勧めのサイトがあったら是非とも教えて欲しい
0517デフォルトの名無しさん
2011/01/05(水) 19:03:020518デフォルトの名無しさん
2011/01/05(水) 19:15:35の中のPrism4.chm
0519デフォルトの名無しさん
2011/01/05(水) 19:54:01トン
0520デフォルトの名無しさん
2011/01/05(水) 20:10:580521デフォルトの名無しさん
2011/01/06(木) 02:32:080522デフォルトの名無しさん
2011/01/06(木) 02:40:21WPF が終わるのは、WPF のほぼ全機能が Silverlight に移った時だと思うんだけど。
0523デフォルトの名無しさん
2011/01/06(木) 09:02:39最初からSiliverlight一本でやってたほうがよかったんじゃないの?
二本立てにすることにメリットあったのかな?
0524デフォルトの名無しさん
2011/01/06(木) 09:06:13色々あるからしょうがない。
例えば、WPF 自身にも、じゃあ、Forms なんて出すなよって思うわけだけど
WPF が完成するまで .NET Framework のリリース遅らせれるかって言ったら、
そんなことしてたら10年近く VS の新品出なかったのよ。
とりあえず Win32 API をラップしただけの Forms 必要だったでしょ。
0525デフォルトの名無しさん
2011/01/06(木) 15:09:54Window.xaml.csにTextBox_KeyDown(object sender, KeyEventArgs e) が作られますが
これをWindow.xaml.csとは別のcsファイルに書く方法ってありませんか
interactivity.dllのEventTriggerをつかうとKeyDownイベントでCommandを呼べるようにはできましたが
CommandParameterにKeyEventArgsを渡す方法が分かりませんでした
0526デフォルトの名無しさん
2011/01/06(木) 16:19:01System.Windows.Interactivity.Behavior<UIElement>あたりから継承
0527デフォルトの名無しさん
2011/01/06(木) 16:47:20ニュー速なんだよあれw
0528デフォルトの名無しさん
2011/01/06(木) 17:20:54ありがとう
Blendからもポトペタでできるようになりました
0529デフォルトの名無しさん
2011/01/06(木) 23:51:32WPFは.Netネイティブだから表示遅いし重いんだっけ?
0530デフォルトの名無しさん
2011/01/06(木) 23:56:380531デフォルトの名無しさん
2011/01/06(木) 23:56:560532デフォルトの名無しさん
2011/01/06(木) 23:59:22WPFよりもかなり消極的でキャッシュも控えめで描画面積が広くなると目に見えて遅くなる。
WPFはフレームワーク自体はC#で書かれてるけど描画はネイティブだよ。
0533デフォルトの名無しさん
2011/01/07(金) 00:17:110534デフォルトの名無しさん
2011/01/07(金) 00:27:58ここにはSilverlightのが表示早いみたいに書かれてるけど。
0535デフォルトの名無しさん
2011/01/07(金) 00:35:43DataGridはもともとSilverlight向けに作られたのでWPFでの調整が十分にできてないだけ。
0536デフォルトの名無しさん
2011/01/07(金) 23:20:31描画に関しては、まだ比較計測していないが
ループ処理は、WPFの方が10倍近く早かった。
0537デフォルトの名無しさん
2011/01/07(金) 23:37:030538デフォルトの名無しさん
2011/01/08(土) 00:03:51for文とかwhile文とか。
0539デフォルトの名無しさん
2011/01/08(土) 00:10:30.NET FrameworkのCLRとSilverlightのCLRはほぼ同じもの
若干Silverlightの方が最適化が控えめらしいが10倍はどう考えてもありえない
0540デフォルトの名無しさん
2011/01/08(土) 00:19:010541デフォルトの名無しさん
2011/01/08(土) 00:34:27文字列連結は誤差範囲、単純なループ+数値の加算だと1〜2倍くらい
0542デフォルトの名無しさん
2011/01/08(土) 01:07:00ガベコレの性能が全然違うんで、
ループの奥でインスタンス生成とかしてるとパフォーマンス10倍変わる可能性ある。
Silverlight の CLR は優秀だったはず。
もしかすると、Silverlight for Windows Phone 7 の話だとすると、
WP7 は Compact Framework ベースなので、確かに遅そう。
0543デフォルトの名無しさん
2011/01/08(土) 12:03:50private void button1_Click(object sender, RoutedEventArgs e)
{
DateTime timer = new DateTime();
timer = DateTime.Now;
for (uint i = 0u; i < 4294967295u; i++) ;
MessageBox.Show((DateTime.Now - timer).ToString());
}
コードはこれで良い?
(xamlにボタン1個置いて、ボタン押したら計測開始の想定で)
0544デフォルトの名無しさん
2011/01/08(土) 12:24:510545543
2011/01/08(土) 12:27:50[ Ctrl ] + [ F5 ] で実行
1回目 : 1.3660000 (秒)
2回目 : 1.3610000 (秒)
3回目 : 1.3620000 (秒)
[ F5 ] で実行
1回目 : 10.2020000 (秒)
2回目 : 10.1960000 (秒)
3回目 : 10.1970000 (秒)
Visual Web Developer 2010 Express
Silverlight 4.0.51204.0
OOB実行 (ブラウザで変わるとは思わないけど、念の為)
[ Ctrl ] + [ F5 ] で実行
1回目 : 10.7090000 (秒)
2回目 : 10.6980000 (秒)
3回目 : 10.7320000 (秒)
[ F5 ] で実行
1回目 : 10.7040000 (秒)
2回目 : 10.6950000 (秒)
3回目 : 10.7140000 (秒)
OSはWindows Vista + SP2 (x86)
CPUはIntel Core2 Extreme X9650 @3.00GHz
0546デフォルトの名無しさん
2011/01/08(土) 12:40:52こっちだと[Ctrl]+[F5]で両方2秒前後で差は無かったよ
デバッグ有効だと両方9秒程度
VWD2010, Silverlight 4.0.51204.0
XPSP3(x86), PenD 3.00GHz
生成されたテストページを直接ブラウザで開いたらどうなる?
0547543
2011/01/08(土) 12:47:18>生成されたテストページを直接ブラウザで
それもやってみたんだけど、やっぱりSL4だと10秒以上掛かった。
IE8とGoogle Chromeで、1回ずつ試行。
こっちの環境が何かおかしいのかな。
0548デフォルトの名無しさん
2011/01/08(土) 13:35:13何10ヶも繰り返していると OutOfMemoryException が発生してしまいます。
海外サイトでも取り上げられていて、同じように実装しているのですがどうしても
発生してしまいます。
何か問題ありますでしょうか?
[DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
string[] srcFiles = Directory.GetFiles(srcFolder, "*.jpg");
Array.Sort(srcFiles);
if (!Directory.Exists(dstFolder))
Directory.CreateDirectory(dstFolder);
foreach (string name in srcFiles)
{
using (Bitmap srcImage = new Bitmap(name))
{
string dstName = Path.Combine(dstFolder, Path.GetFileName(name));
IntPtr ptr = srcImage.GetHbitmap();
BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
ptr, IntPtr.Zero, Int32Rect.Empty,BitmapSizeOptions.FromEmptyOptions());
DeleteObject(ptr);
bs = null;
GC.Collect();
}
}
0549デフォルトの名無しさん
2011/01/08(土) 14:23:430550デフォルトの名無しさん
2011/01/08(土) 15:13:31最後の方に入ってるな。
0551デフォルトの名無しさん
2011/01/08(土) 15:19:130552デフォルトの名無しさん
2011/01/08(土) 16:47:410553デフォルトの名無しさん
2011/01/08(土) 16:56:11どこからともなくやってきて問答無用で即死の類
0554デフォルトの名無しさん
2011/01/08(土) 16:58:14拾おうと思えば拾えるのもあるからやれ
0555デフォルトの名無しさん
2011/01/08(土) 17:02:34Image.FromFileは4.0でもOutOfMemory投げてる。
頭おかしい。
0556デフォルトの名無しさん
2011/01/08(土) 18:50:38OOM 例外が発生するのは、
srcIamge.GetHbitmap();
です。
DeleteObject(ptr);
で解放しており、BitmapSource をコメントアウトすると OOM 例外は発生せず何事もなく終了します。
GetHbitmap で取得したオブジェクトは DeleteObject で解放しているようなのですが、
BitmapSource が間に入ると解放されずに保持しっぱなしのようです。
BitmapSource に Dispose がないので、代わりに null を代入して GC.Collect() しているのですが・・・
0557デフォルトの名無しさん
2011/01/08(土) 19:54:23http://www.google.co.jp/search?hl=ja&q=CreateDIBitmap+%E3%83%A1%E3%83%A2%E3%83%AA%E4%B8%8D%E8%B6%B3&aq=f&aqi=&aql=&oq=&gs_rfai=
CreateDIBitmapってのはDIB(GDI+のイメージオブジェクトの中身)からDDBを作るもの
0558デフォルトの名無しさん
2011/01/08(土) 20:02:35BitmapImageに読んじゃ駄目なのかなぁ。
0559デフォルトの名無しさん
2011/01/08(土) 20:17:23BitmapSource をコメントアウトして、GetHBitmap と DeleteObject だけだと
メモリは問題なく解放されているんですよ。
BitmapSource を HBitmap から作成すると解放されませんので、
BitmapSource あたりにに問題があると思います。
>>558
System.Drawing.Bitmap でいろいろやった後に、BitmapSource しなければ
ならない事情が。
0560デフォルトの名無しさん
2011/01/08(土) 20:27:29これだな。Framework のバグ。
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=410590&wa=wsignin1.0
>>558
そういう話の展開はあまり意味ないぞ。
何にもコメントできなくなったやつが、意味もなく言い出すことだ。
0561デフォルトの名無しさん
2011/01/08(土) 20:27:550562デフォルトの名無しさん
2011/01/08(土) 21:02:48マルチスレッドで扱う方法を知らないという落ちじゃないだろうな?
0563デフォルトの名無しさん
2011/01/08(土) 21:13:24WPFのエンコーダが使いたいだけとか
0564デフォルトの名無しさん
2011/01/08(土) 21:18:220565デフォルトの名無しさん
2011/01/08(土) 22:10:33バグですか。これは当分使える見込みなさそうですね。
>>563
そうなんです。WPF のエンコーダであれば PNG 8bit などの保存ができますので。
>>564
こちらの方法で試してみましたが、結果はほぼ同じでした。
http://www.netframeworkdev.com/windows-presentation-foundation-wpf/createbitmapsourcefromhbitmap-dpi-85977.shtml
上の方に書いた方法ですと 2G のメモリを食い尽くして OOM が発生していましたが、こちらの方法であれば正常に終了しました。
しかしタスクマネージャで使用メモリを見ていると、実行を開始すると使用メモリが 20MB からどんどん上昇し、
600MB まで達したところで、ちょうど実行が終了しました。
この方法で OOM は出ませんでしたが、実行中はメモリ使用量が異常に上昇してしまう現象は同じようです。
しかしこのメソッドの実行終了後、使用メモリは一気に元の20MB に戻りましたので、GC は何らかの形で動いているようです。
0566デフォルトの名無しさん
2011/01/08(土) 22:40:460567デフォルトの名無しさん
2011/01/09(日) 09:42:54Viewが更新されても4項目目が一番上に来るみたいですね
そこでデータソートして1番目のアイテムをScrollIntoViewで一番上に表示させたらいいと思ったんですが、CollectionViewSource
使ったソートは項目自体を並び替える訳じゃないようで、一つ目の項目取り出しても最初に入れた項目が出てきます
ListViewのスクロールさえリセットできたら良いんですが、何か良い方法はありませんか?
0568デフォルトの名無しさん
2011/01/09(日) 14:29:410569デフォルトの名無しさん
2011/01/10(月) 15:00:59自分のアプリにつけて配布しちゃっていいってことだよねー
英語できないとだめだなぁ・・
0570デフォルトの名無しさん
2011/01/15(土) 18:41:19検索してもさっぱりだし、うちの環境が悪いのか、みんなWPFなんて試してもいないのかもわからない
0571デフォルトの名無しさん
2011/01/15(土) 19:12:15俺Formアプリで十分作りやすいんだけど
わざわざめんどうなXML編集するほどのメリットがある感じ?
0572デフォルトの名無しさん
2011/01/15(土) 19:23:51まず自分で触れ
0573デフォルトの名無しさん
2011/01/15(土) 20:04:28全体的に API 洗練されてる
コントロール類とほとんど同じノリでベクター画像、3D、動画等混ぜ込める
ビューとモデルの分離しやすい
等々。
0574570
2011/01/15(土) 21:08:39フォーラムでg.i.csがどうとか言ってたのが完全にfixされてないのか
0575デフォルトの名無しさん
2011/01/16(日) 01:44:29なんてWPFと仲悪いんですか?
0576デフォルトの名無しさん
2011/01/16(日) 01:54:090577デフォルトの名無しさん
2011/01/16(日) 02:08:170578デフォルトの名無しさん
2011/01/16(日) 02:09:17実は仮面夫婦なんですよ
0579デフォルトの名無しさん
2011/01/16(日) 03:11:58それは、カン・チョクト夫妻な
0580デフォルトの名無しさん
2011/01/16(日) 04:11:080581デフォルトの名無しさん
2011/01/16(日) 10:05:36全く同期されてなくて 片方で編集→もう一方でプロジェクトをリロード を繰り返すことになる
0582デフォルトの名無しさん
2011/01/16(日) 10:15:350583デフォルトの名無しさん
2011/01/16(日) 11:00:00BlendはバインディングやSetterやxmlns:などで全然インテリセンスが効かない
必要ないということなんだろうけど、たまにどうしてもBlendで直接XAML編集したいときにイラっとする
変更がバッティングしたりして面倒だし、どうせ完全にプログラミング寄りで
どう考えても純粋なデザイナーが使うもんじゃないんだからVSに統合でいいよ
0584デフォルトの名無しさん
2011/01/17(月) 07:47:37コマンドでパラメータを渡す時に、複数のエレメントの値をバインドして渡す場合は
どの様にしたらいいんでしょうか?
0585デフォルトの名無しさん
2011/01/17(月) 20:18:33煮詰まっています。
わからないのは以下の3点です。
1.ListBoxのItemSourceへのデータバインドの方法(XAMLおよびコード)
以下が例です。(ListBoxに表示するのはNAMEのみ)
ID/NAME
1 晴れ
4 曇り
5 雨
2.WTextBoxに依存関係プロパティ(w)を設定する。
このとき、 デザイナよりコントロールを配置し、WTextBox.w = 4
を設定した場合、Listbox の ID と一致する項目が選択されているようにするには?
3.ListBoxで選択した項目のIDをWtextBox.w と同期する方法
どなたか親切な方、よかったら教えてください。
0586デフォルトの名無しさん
2011/01/17(月) 20:55:391.渡したいデータをプロパティとして持つCommandParameter用の型
2.MultiBindingからその型に複数の値をセットするConverter
を作って、それを使ってCommandParameterにBinding。ググれば例は出てくると思う。
>>585
丸投げは関心しない。最低限の基礎を理解してからもう一回出直すことをお薦めする。
■ このスレッドは過去ログ倉庫に格納されています