[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 09/14 16:35 / Filesize : 183 KB / Number-of Response : 673
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3



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の屁理屈?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<183KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef