1 名前:デフォルトの名無しさん [2009/01/09(金) 22:14:36 ] あたらしいGUI FW、WPFについて語るすれ。 .NET3.5 SP1 もリリースされて盛り上がってまいりますた。 Visual Studio 2008 ttp://www.microsoft.com/japan/msdn/vstudio/ Microsoft .NET Framework 3.5 Service Pack 1 ttp://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=ja WPF Toolkit - October 2008 Release ttp://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=15598 関連スレ Microsoft Silverlight 2.0 その3 ttp://pc11.2ch.net/test/read.cgi/tech/1227324813/ 過去スレ 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/
321 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:02:35 ] そうそう。UI定義の方法は、Windows Forms時代には、デザイナが勝手な流儀で勝手にやっていただけ。でもxamlはXMLベースで標準の構造的な仕様が定まっていて、その構造の上にデザイナが 乗っかっている。だから、ブラックボックスで気持ち悪い、とはならない。
322 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:29:15 ] 以前に書き込んだC#+WPF+ARToolkitPlus+DShow.NETでミクさん大放出を、 Windows Media Playerの視覚エフェクトにしてみた。WMPのSDK的に視覚エフェクト プラグインはC++で作ってオンフレームでデバイスコンテキストに描画するように なっているので難儀したけど、C#板でCOM InterOpについて助言してもらってどう にかC#+WPFだけで全部やれた。 動画:www.nicovideo.jp/watch/sm6242828 ソース:sites.google.com/site/augmentedrealitytestingsite/download のWMPEmitMiku.zip なんかもうコンセプトがカオスになってきて、WPF板的にスレ違いっぽくなってきたので これで終わりにするわ。後の進展(あるか分からないけれど)に興味がある人がいたらニコ動の マイリストでも時々見てくれ。
323 名前:デフォルトの名無しさん [2009/02/23(月) 21:36:00 ] > window1.g.csはXAMLを読み込む処理を呼び出して > 読み込まれた要素を対応するC#のフィールドに代入するためだけに生成される いっている意味がよくわからないんだけれど、 window1.g.csはイベントのシンクとかも処理しているように見えるんだが。 フィールドの代入だけなんて代物じゃないんじゃないの? xaml全体がシンタックスシュガーかと思っていたよ。 そんなとこまで隠蔽して、
324 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:40:22 ] 323が隠蔽された!
325 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:49:21 ] window1.g.csがやってること ・リソースのXAMLを読み込む(Application.LoadComponentに丸投げ) ・ロード後,CLRフィールドに要素を代入 ・イベントハンドラのアタッチ
326 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:59:07 ] C#だってILに変換される。それを隠蔽とは言わない。 期待される動作が一通りで、その通りの動作をするのならば、より低いレベルが隠蔽されていても 問題にはならない。必要に応じて高レベル、低レベルを使い分ければ良い。 ブラックボックスが気に食わないのは、ただ一通りの動作を期待できないからで、それは知識不足 のせいだと思うんだけど。
327 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:13:06 ] XAMLをAPIでパースして、親子関係にのっとり それぞれのUI用クラスを生成してるだけだろ? どこが隠蔽されてて気持ち悪いのかぜんぜんわからねーよ。
328 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:22:48 ] バインディングとかがイベントで実装されている事を知らずに、謎のコードが自動生成されている とか勘違いしているのかなあ。 俺が気持ち悪く感じるのは、XAML記述上の直接の子要素がどのプロパティ(ChildrenとかContentとか) に対応するのかXAMLを見ただけでは分からない事だけだ。まあ確かにこれだけは気持ち悪い。
329 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:14:26 ] 以前アップしたXAMLを使わないWPFの例 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8924.txt 一番下のXAMLのWindowsタグをPageに変えて、utf-8でhoge.xamlで保存。 IEで開けばloose xamlでも動く。
330 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:42:06 ] >>322 ARToolKitはC++でライブラリをラップして、 DLL作ってから参照してるのかいな?
331 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:57:40 ] >>330 その部分はbrains-N-Brawnさんの仕事。 ``ARToolKitPlus - modified to be a DLL and export C-style functions that can be pInvoked from C#'' www.mperfect.net/wpfAugReal/ その部分だけpure .netじゃない。そのDLLをPInvokeするラッパはbrains-N-Brawnさんのを拝借 していてそれはpure C#(PInvokeがpureかは別として)。それからDShow.Netも(COM InterOpが pureかは別として)pure C#。そんでもって3D出力は、NyARToolkitなんかがDirectX SDKに含まれる Managed Direct Xを必要とするのに対しこちらはWPFの3Dを使用しているのでまあ敢えて言えば pure(標準の) C#。 というわけで、上記DLLを除いて、オリジナル・非オリジナルのコードいずれも完全に標準のC#と .NET 3.5(WPF)で書かかれている。まあ、NyARToolkitなんかはARToolkitのコードをマネージコード に真面目に移植しているので、どっちがpureかというのは微妙だけど。でも、3D出力がWPFである点 によって、とっつき易いアプローチになっている面は確実にあると思う。というか、それで無理やり 関連付けてこのWPFスレに投稿しているわけなんだが。
332 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:58:25 ] ごめん、改行が変になって読みにくくなった。
333 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:00:05 ] Windows フォトギャラリーで露出とかコントラスト調整すると スライダーの移動に合わせてほぼリアルタイムに描画されるんですが、 この機能を自作 WPF プログラムに実装したい場合どうすればよいでしょうか?
334 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:07:08 ] WriteableBitmapでも使って更新しまくれとしか答えようがない 画像処理自体はスレ違い
335 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:10:59 ] 詳しくないんだが、一応バインディングとかINotifyPropertyChangedインタフェースとかの話題じゃないか?
336 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:17:39 ] ビットマップの方更新するだけでよかったはず
337 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:19:37 ] どのタイミングで更新、っていいたいんじゃ?
338 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:22:30 ] ダイナミックリソースとかバインディングじゃないの?
339 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:22:59 ] >>331 を、便利な物を作ってる人がいたんだ!。 ARには興味あったのでいじくってみる。 ソース読ませていただきます。
340 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:24:30 ] よし、リフレクタの出番だ。 www.red-gate.com/products/reflector/
341 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:27:05 ] ほんとにビットマップ更新するならバインディングじゃどうしようもない SliderのValueChangedイベント使うくらい
342 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:38:30 ] 結局C#なのね
343 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:43:21 ] >>333 の言いたいことってこういうこと? blogs.wankuma.com/kazuki/archive/2009/01/12/166166.aspx
344 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 09:29:03 ] >>323 はタブーに触れて消されちゃったんだなあ。
345 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:55:23 ] 入力可能なDataGrid風ListView↓使ってる人っている? ttp://pro.art55.jp/?eid=908012 ttp://d.hatena.ne.jp/Yamaki/20070706/1183688885 テキストの編集中、右クリックでTextBoxデフォルトのContextMenuを開くと TextBoxがキーボードフォーカスを失い、編集モードを終えてしまうんだけどそういう風にはならない? ContextMenuのアイテムも選択できない。
346 名前:333 mailto:sage [2009/02/24(火) 22:01:41 ] おまえら、エスパーすぐるw >>343 そこを参考にして画像ビューワーを作ってて、 >>341 のイベントで、 >>334 の方法で自前で露出の調整をしたら、 イベントの処理に5秒もかかっちゃって、 がんばって最適化しても1秒を切ることができなくて、 ためしに、 Vista の Windows フォトビューワーいじってみたら 瞬時に変わるので、これは、GPU 使ってるとか、DirectX 使ってるとか、 なんか自分の知らない WPF テクニックがあるのかと思って質問しました。
347 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:10:35 ] だから、>>340 のリフレクタで解析してみなよ。 俺、Windows XP⇒Windows 7ベータだから、Windows フォトギャラリーないんだ。
348 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:17:07 ] WPF自体はDirectXつかってるけどな
349 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:46:22 ] 単に画像処理の実装が悪いだけだろ WPF自体の描画更新なんか画像処理に比べたら一瞬
350 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:47:51 ] unsafeってしってるか?
351 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:48:31 ] Bitmapの処理はメモリをロックしてアンマネージでポインタを使わないと遅いぞ〜。
352 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:52:26 ] ここはWPFスレですよ WiteableBitmapは十分速いよ もともと>>351 みたいな書き込みの方法しか用意されてない
353 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:03:59 ] writeableBitmapにコピーするデータ作るのに時間かかってるんだろうが
354 名前:333 mailto:sage [2009/02/24(火) 23:05:09 ] >>347 >>340 は俺へのレスだったのか。すまん。 reflector は知ってたけど、Windows フォトギャラリー って .net のプログラムだったんだ? 今日は出先なんで無理だが、家帰ったら試してみる。 >>349 そうなんだよ。だから、フォトギャラリーがどうやってるかわかればなぁ・・・と。 >>350 >>351 >>352 WritableBitmap で unsafe でポインタ使っても遅くて、 C++ で書き直して1秒切るところまでいったんだが、 まだ遅いので質問するにいたったわけです。
355 名前:333 mailto:sage [2009/02/24(火) 23:06:15 ] >>353 そのとおりです。
356 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:07:03 ] アルゴリズムが違うとか,プレビュー用に簡易に処理してるとか いずれにしてもこれ以上はスレ違い
357 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:13:09 ] HLSLでやってみるとか WPFでも使えるようになったことだし
358 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:21:00 ] >>354 もはやあれで半分反則だけどこんなのがある。反則なので速いと いっていいのかわからんが ttp://www.codeplex.com/wpffx 川西先生の紹介↓ ttp://blogs.msdn.com/hiroyuk/archive/2009/02/09/9407704.aspx ちなみにちょっとビルドに注意。Codeplex にある別のやつがいる
359 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 04:54:37 ] Windows Formsコントロールのオーナードロー拡張なんてもういやだ。 WPFの入れ子コントロールとXAMLが欲しい。 あと文字の強制アンチエイリアスはさせたくない。 こんな要望に対するソリューションて現状ある?
360 名前:347,340 mailto:sage [2009/02/25(水) 05:17:51 ] >>354 え、WPFスレで、しかもWPFでどうやるのかって質問だったから、.NETプログラムなのかと勝手に 勘違いしてしまった。そうでないのなら、普通にシェーダ使ってるんじゃないの? 純粋なWPFアプリケーションだとしたら、>>358 なんかで紹介されているWPFでのシェーダの使用 は最近の更新で可能になったものだから、Vista標準のプログラムとしてはないと思う。 結局、.NETプログラムじゃない、シェーダを使ってるか、画像処理を気合で頑張っている、つまり スレ違いって所で落ち着きそうだ。
361 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 06:14:00 ] >>359 XAMLの中で、例えばテキストボックスに <TextBox RenderOptions.EdgeMode="Aliased" x:Name"textbox1" 〜 /> と記述した場合、カーソルバーは1ドット幅の縦棒でシャキーンと表示されるけど、テキスト文字だけは 常にアンチエイリアス処理されますね。これだけ我慢すれば、最良のソリューションじゃないでしょうか。
362 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:29:50 ] >>359 Form上でそれ実現する奴作った。それ使ったシステム5月ぐらいにリリース予定。
363 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:32:20 ] 手伝おう テストするからうpして
364 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:52:25 ] 写真だけうp ttp://www.rupan.net/uploader/download/1235523080.jpg
365 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 11:10:48 ] >359 ElementHost使えば、winformsにコントロール単位でWPFコントロール 持ち込めるだろ。例えば、ListBoxだけとか。 んで、起動時にSystemFontsの中から適当なの選んで設定すれば、 フォントもwinforms同様になる。
366 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 13:33:55 ] 初心者な質問で恐縮です。 InkCanvasのペンの色を変える方法を教えてください。 xamlとC#と両方の方法をお願いします。
367 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 13:40:27 ] msdn.microsoft.com/ja-jp/library/system.windows.controls.inkcanvas.aspx MSDN読めないならWPFなんか手を出さない方がいい
368 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:45:18 ] キーバインディングでメソッドを呼ぶときは、どのように書けばいいですか? たとえばEnterで、設定ボタンを押すとき。 C#だけなら、 private void settingbutton_Click(object sender, EventArgs e){} を呼ぶには、 settingbutton_Click(this, EventArgs.Empty); と書けばいいのですが、xamlではどう書けばいいですか? <KeyBinding Key="Enter" Command="Close"/> のCommandのところに書けばいいのかと思っているのですが、ここを適当に書くと、 'CommandValueSerializer' ValueSerializer は 'System.String' から変換できません。 とエラーになります。System.Stringということは、デフォルトでいくつかきまっていると思うのですが、その一覧はどこにあるのでしょう? またその一覧のなかで、メソッドを呼ぶStringはなにでしょう? よろしくお願いします。
369 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 17:59:24 ] > settingbutton_Click(this, EventArgs.Empty); > と書けばいいのですが、 の意味が心底分からんが 適当にCommandsクラスとか作ってコマンドごとにRoutedUICommandのstatic readonlyフィールドを用意 それをKeyBinding.Commandに設定 あとはCommandBindingでコマンドが呼び出すメソッドを設定
370 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:12:04 ] す…、すまん。ぜんぜんだめだ。 おれが適当に書くとエラーの山だ。 適当にCommandsクラスをどこに作る? .csのほう? public partial class Commands : Window { } コマンドごとにRoutedUICommandのstatic readonlyフィールドを用意 コマンドごと…。ってことは、設定コマンドを作るのだから、 public partial class Commands : Window { Setting } それをKeyBinding.Commandに設定 xamlで <KeyBinding Key="Enter" Command="Setting"/> CommandBindingでコマンドが呼び出すメソッドを設定 private void setting(object sender, EventArgs e){//メソッド} 添削頼む…。
371 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 18:28:17 ] > 適当にCommandsクラスをどこに作る? .csのほう? > public partial class Commands : Window { System.Windows.Input.ApplicationCommandsみたいにstaticクラスでいいよ。 新しくcsファイル作ってそこにでも。 まあ別にCommandsクラスじゃなくてもいいけどな。肝心なのはRoutedUICommandのフィールドだから。 ApplicationCommandsみたいにICommandは一つにまとめるのが自然だと思っただけで。 つかまずApplicationCommands.CloseとかでKeyBindingとCommandBinding使ったの書いてみろよ。 MSDNやヘルプのこれらのクラスの解説にサンプルがいくらでもあるから。
372 名前:デフォルトの名無しさん [2009/02/25(水) 18:42:14 ] WPFの根幹ってWin32API群なの? .NET とどう違うの?
373 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:08:57 ] WPFも.NETで動くことは変わらない WPFはSystem.Windows.Formsに代わる新しいGUIフレームワーク 最大の特徴は,Win32ネイティブのコントロールを使用せずにウインドウの中身を 一枚の絵としてすべてのコントロールをDirect3Dで自前で描画してること ゲームの画面にたくさんのキャラクターを描画するのと同じ仕組み
374 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:16:26 ] ApplicationCommands.CloseでKeyBindingとCommandBindingのは書けてます。 xamlに <KeyBinding Key="E" Modifiers="Control" Command="Close"/> csに private void Close_Executed(object sender, RoutedEventArgs e ){Close();} public void Close(object sender, CancelEventArgs e){} です。 じゃあsittingの場合は…。 xamlに <KeyBinding Key="S" Modifiers="Control" Command="setting"/> csに private void setting_Executed(object sender, RoutedEventArgs e ){setting();} public void setting(object sender, CancelEventArgs e){} としてはまってるわけです。 で、System.Stringの一覧はどこにあるのでしょう?
375 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:11:33 ] System.Stringは文字列型の事だよ。 それと、<KeyBinding ほにゃらら だけじゃなくて、それと <CommandBinding ほにゃらら がセットになって初めてコマンドのバインディングができる。 それから、 <KeyBinding Key="E" Modifiers="Control" Command="Close"/> の Command="Close" って記述においては、ApplicationCommandsが特別扱いされている。 より冗長だが汎用的な書き方は <KeyBinding Key="E" Modifiers="Control" Command="ApplicationCommands.Close"/> となる。つまりクラスのフィールドを指定しているわけ。多分そのエラーメッセージは、この指定 がうまく行っていないという事。それでもって、自分で作ったクラスの静的フィールドを指定する には、さらにxamlのマークアップ拡張を使う必要がある(多分)。 だから、xamlは <Window x:Class="Foo.Window1" ... xmlns:foo="clr-namespace:Foo"> <Window.CommandBindings> <CommandBinding Command="{x:Static foo:Window1.FooCommand}" Executed="FooCommand_Executed" /> </Window.CommandBindings> <Window.InputBindings> <KeyBinding Key="f" Modifiers="Control" Command="{x:Static foo:Window1.FooCommand}" /> </Window.InputBindings> </Window> で、Window1.xaml.csの中の# public partial class Window1 : Window {...}の中に staticでreadonlyなFooCommandフィールドと、FooCommand_Executedメソッドを実装する。 多分こんな感じ。
376 名前:375 mailto:sage [2009/02/25(水) 20:21:42 ] >>375 は俺自身参考にした事がある blogs.wankuma.com/kazuki/archive/2008/03/16/127942.aspx の記事を読み直してまとめたもの。詳しくはリンク先の記事を、やる気があれば 連載になっているから最初から、読んで行って。
377 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:00:22 ] 実験してみたけど、 Command="{x:Static foo:Window1.FooCommand}" は Command="foo:Window1.FooCommand" とどちらでも問題ないみたい。だから必ずしもx:Staticのマークアップ拡張を使う必要はない。
378 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 21:44:38 ] >>373 ありがとうございます DirectX系で壁画するということはGPUと相性がよさそうですねVista Aeroなんかとも
379 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 08:10:20 ] 原始人現る
380 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 08:20:15 ] 壁画って何だよ?
381 名前:デフォルトの名無しさん [2009/02/26(木) 09:15:54 ] >>373 WPFで作ったアプリのUIを自動テストするのは、どんな感じ? 大昔つくったアプリは、コントロールにメッセージ送りつけてやったけど。
382 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:00:52 ] UI Automationという機能を使うらしい
383 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 14:11:27 ] だれか優しくスマートに懇切丁寧におしえろ。 ListBox.Items.Add("うんこ")見たいな物を3回ループしてやると選択がくるっとんねんけどな、コンテンツだと正常なんだわ。 ListBoxて文字でアイテム管理しとん? 解決方法どないやねん??? >>384
384 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 14:19:06 ] 質問が把握できないので返答もできないわ。力になれなくてごめん。
385 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 14:21:26 ] そんな答えほしなかったわぁー。 おっちゃんも暇ちゃうねん、出来るだけはよう答えてくれへんか? 色々問題もあってやな、今火達磨状態やねんで? 誰かに伝えたいこの想い
386 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 16:53:09 ] >>381-382 皆さん、UnitTestのテストレポートってどうしてる? 基本的に、初期値、幾つかの中間値、そして境界値とその内外だけを確認?
387 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:46:12 ] UnitTest?なんですかそれは ゆとりにもわかるように説明してください
388 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 01:04:38 ] WPFで読み込んだファイルの取り扱いについて質問があります。 下記のようにファイルを読み込むとロックするのですが、 string imgFile = @"C:\tmp.jpg"; img.Source = new BitmapImage(new Uri(imgFile)); ロックをはずす方法を教えてください。 ちなみにFormの場合には、 pictureBox1.Image = Bitmap.FromFile(imgFile); pictureBox1.Image.Dispose(); でロックをはずすことができます。 よろしくお願いします。
389 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 01:41:22 ] Windows.FormsのBitmapでロックされないように MemoryStreamに読み込んでそこからBitmapを読み込むことはよくやる。 同じようにMemoryStreamに読み込ませてBitmapDecoderで読み込めばいいんじゃないかな?
390 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 02:07:24 ] >>388 BitmapImage bmp = new BitmapImage(); bmp.BeginInit(); bmp.UriSource = new Uri(imgFile); bmp.CacheOption = BitmapCacheOption.OnLoad; bmp.EndInit();
391 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 02:49:29 ] みなさま。 早速ありがとうございます。 >>390 これで試してみました。 しかし、ウィンドウは開くものの、ファイルはなにも表示されなくなってしまいました。
392 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:30:28 ] >>391 コントロールに読み込んだイメージセットしてないだろ
393 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:38:49 ] UI要素の下や上だけに境界線を引くにはどうしたらいい?
394 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:46:38 ] >>392 bmp.UriSource = new Uri(imgFile); だけではセットしたことにならないの? セットの方法を教えてください。
395 名前:393 mailto:sage [2009/02/28(土) 12:57:36 ] 自己解決 <Border BorderBrush="Black" BorderThickness="0 1 0 0">
396 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 13:27:07 ] >>394 処理の内容ちゃんと理解しなきゃ
397 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 13:33:32 ] >>394 >>388 に書いてある img.Source = new BitmapImage(new Uri(imgFile)); ってコードの、右辺の処理new BitmapImage(new Uri(imgFile))をファイルがロックされないように 書き直したのが>>390 。出来上がったBitmapImageのインスタンスをimg.Sourceから参照させる 処理は書かなきゃ。
398 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:29:38 ] できました。1日いろいろ試してました。 (1)img.Source = new BitmapImage(imgFile); (2)BitmapImage img = new BitmapImage(); img = imgFile; (3)BitmapImage img = new BitmapImage(); img = bmp; (4)BitmapImage img = new BitmapImage(); img.Source = bmp; (5)BitmapImage img = new BitmapImage(); img.Source = bmp; (6)BitmapImage img = new BitmapImage(bmp); 結局次のようにしてできました。 BitmapImage bmp = new BitmapImage(); bmp.BeginInit(); bmp.UriSource = new Uri(imgFile); bmp.CacheOption = BitmapCacheOption.OnLoad; bmp.EndInit(); img.Source = bmp;
399 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:30:14 ] 処理の内容の理解をしている限りでは、 BitmapImage bmp = new BitmapImage(); //あたらしいbmp変数を作る。bmpのインスタンスを作る。 bmp.BeginInit(); //bmpの処理を始める。 bmp.UriSource = new Uri(imgFile); //bmpにUriソースからデータを読み込む。 bmp.CacheOption = BitmapCacheOption.OnLoad; //?? bmp.EndInit(); //読み込みの終了。これでディスクとは切り離される。 img.Source = bmp; //画面のimgにbmpをいれる。これでimgにbmpを表示できる。 これで表示はできロックもなくなりました。 しかしながら、問題が。 目的のファイルの削除をする、という動作がまだできないままなのです。 削除処理は次のように書きました。 private void button1_Click(object sender, RoutedEventArgs e) { System.IO.File.Delete(imgFile); } これでボタンを押すと、ウィンドウが消えるのですが、ファイルは残ったままです。 アドバイスお願いします。
400 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:07:14 ] >>399 string path = @"C:\test.jpg"; BitmapImage bmp = new BitmapImage(); bmp.BeginInit(); bmp.UriSource = new Uri(path); bmp.CacheOption = BitmapCacheOption.OnLoad; bmp.EndInit(); image1.Source = bmp; System.IO.File.Delete(path); これで動いたよ > 削除処理は次のように書きました。 > private void button1_Click(object sender, RoutedEventArgs e) > { > System.IO.File.Delete(imgFile); > } これのパスを間違えてるとかじゃね
401 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:14:16 ] >>399 >bmp.CacheOption = BitmapCacheOption.OnLoad; //?? 分からなければMSDNで調べろよ… msdn.microsoft.com/ja-jp/library/system.windows.media.imaging.bitmapimage.cacheoption.aspx msdn.microsoft.com/ja-jp/library/system.windows.media.imaging.bitmapcacheoption.aspx
402 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:18:44 ] > bmp.CacheOption = BitmapCacheOption.OnLoad; //?? なんだよそれ?いい加減にしろよ。 msdn.microsoft.com/ja-jp/library/system.windows.media.imaging.cachedbitmap (VS.80).aspx これ全部読むまで再質問禁止。
403 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:27:25 ] >>400 ありがとうございます。 なんだかわからないのですが、一度終了して再起動したら動くようになりました。 いろいろありがとうございました。
404 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 16:49:22 ] WPFの「Frame」カスタムコントロール作成でこけましたorz Blendで作ってもらったFrameのXAMLをVSで読み込ませると 「'Frame' ControlTemplate TargetType は、テンプレートの型 'PlaceHolderControl' と一致しません。」(エラー場所は無駄な事言ってるので省きました) と、例外が発生します。 コントロールを作ってもらっても一緒です。 しかし、これらは実際バグっているわけでもなく、ビルドもコンパイルも正常に動きます。 どうもVSのデザイナだけがこけています。 何かいい回避方法(Frameに似たコントロール)などありませんか? よろしくお願いします。 環境:Windows7 VS2008
405 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:17:27 ] 言ってることがよくわからない FrameのControlTemplateを作ってるの?それ何の意味があるの? そんなことしないでユーザコントロールにFrameを張り付ければ一緒だと思うんだが
406 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:29:38 ] FrameってHTML表示したいときとか 「戻る」「進む」ができるようにしたいときに使うんだよわかってる? コンテンツを飾り付けしたいだけならDecoratorの派生クラス(Borderなど)使う もちろんFrameを飾り付けするのにもDecoratorが使えるし,普通はテンプレート使わずにそうする
407 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:34:06 ] すいません、言うべき事が抜けすぎでした・・・ 分け合って「Frame」コントロールを作ってもらいました。 これはWebページとXAMLファイルを頻繁に行き来することになったのでこのようにしています。 そしてコントロールにする必要があるのは、そのFrameの中にゴチャゴチャしたものをつける必要があったのです。 発注したコントロールに問題があるのかと思ったのですが、Frame自体を少しでも変えるとおかしくなります。 <Window.Resources> <ControlTemplate x:Key="FrameControlTemplate1" TargetType="{x:Type Frame}"/> </Window.Resources> <Grid x:Name="LayoutRoot"> <Frame Margin="128,160,200,131" Content="Frame" Template="{DynamicResource FrameControlTemplate1}"/> </Grid> このような簡単なものでもエラーになってしまいます。 理由を教えてください
408 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:42:32 ] ちょっと状況が良く分からないんだけど、WPFにFrameコントロールがあるので 衝突しているんじゃないかな? xmlns宣言で名前空間への参照を追加して、名前空間込みで「Frame」コントロールや そのx:Typeを指定したらどうだろう?
409 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 19:48:34 ] その自作FrameのTemplatePart属性は確認した?
410 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:00:28 ] >>408 ちょっと判らなかったです・・・ MSDNをみてやってみたのですがうまくいきません。 アセンブリは「PresentationFramework.dll 内」となっているので問題ないですが、 XMLNSは参照して追加しても「タグ 'Frame' は、XML 名前空間 'schemas.microsoft.com/winfx/xaml/presentation ' にありません。」 となってしまいます。 色々やってみた結果、 <Frame Margin="120,192,136,139" Content="Frame" Template="{DynamicResource FrameControlTemplate1}"> <Frame.Resources> <ControlTemplate x:Key="FrameControlTemplate1" TargetType="{x:Type Frame}"> <ContentPresenter /> </ControlTemplate> </Frame.Resources> </Frame> ではVSでもBlendでもデザイナで編集したり、コンパイルできたりするようになりました。 結局こうなってしまう理由がわかりませんw リソース内でFrameのスタイルを指定させたいのですが、どうしてもうまくいかない・・・ >>409 これはどういうことでしょうか? 「TemplatePart」というのが判らず仕舞いになってしまいましたorz 申し訳ないです。;;
411 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:08:56 ] コントロールテンプレートは完全に自由に書いていいわけじゃなくて, 最低限テンプレートに含めないといけないコントロールが決められてるのが普通 それを示す属性がTemplatePart 逆に,そういう条件が必要ないならあまりテンプレートを使う意味がない
412 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:19:23 ] >>410 ツール-オプション-テキストエディタ-xaml-その他-既定のビュー で 「常にフルxamlビューでドキュメントを開く」 のチェックを外せば直るみたい。 でも、xaml直書きする場合、このチェックは入れておきたいよねえ。 なんか普通にバグっぽいぞ。
413 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 21:38:27 ] >>411 >コントロールテンプレートは完全に自由に書いていいわけじゃない てっきり何をしてもいい>>412 物だだと思っていました! TemplatePartは詳しく調べる必要があるようです。 >>412 うまくいきませんでした・・・ どうしても「'Frame' ControlTemplate TargetType は、テンプレートの型 'PlaceHolderControl' と一致しません」がデザイナのみにエラーが出てきます。 コンパイル、ビルドも出来るので間違ってはいないと思いますが、VSのデザイナが使えないというのはキツイです・・・
414 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 04:37:13 ] WPFのデザイナは相変わらず貧弱だなぁ そこが萌えるんだけどw
415 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 16:28:41 ] WPF始めてみたいけどネット上には驚くほど資料ないねこれ・・・
416 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 16:40:00 ] InteliSenseこそ最上のヘルプ
417 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 17:02:12 ] >>416 試すパターンが膨大で困るw
418 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 17:12:14 ] 書店にも本が並んでない すべてxamlのせいで敷居が高くなってるせいだと思う WPFだけなら新しいコントロールライブラリってことで十分普及したと思うよ Microsoftはxaml使うのをWPFが使われるようになってからに遅らせるべきだった
419 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 17:25:04 ] ネットだと ufcpp.net/study/dotnet/index.html とか uchukamen.com/WPF/Default.htm くらいを見て、後はいろんな人のブログを見てバインディング周りの 定石をしれば、本当の話IntelliSenseで十分ヘルプになるようになる と思う。
420 名前:419 mailto:sage [2009/03/05(木) 17:26:32 ] ごめん、419の前にこれを投稿しようとしたんだ。 俺はWPF+XAMLはWindows Formsや昔のWin32APIでウィンドウ 作ってた時代よりも初心者向けだと思うよ。 本がないのも外国語の物は専門性の高い物から入門書まで多いし、 日本の出版事情が大きいんじゃないかな。
421 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 18:07:43 ] ちょっと質問! TextBlockで普通の改行入りテキストを <TextBlock TextWrapping="Wrap"> あれ?<LineBreak /> 声が<LineBreak /> 遅れて<LineBreak /> 聞こえるよ<LineBreak /> </TextBlock> こうやって作った後Blendとかに再読み込みさせると「Inline」がいっぱい引っ付いてくるんだけど、この書き方は推奨されていないから? それともBlendの屁理屈?