トップページtech
1001コメント283KB

WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part8

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/12/05(日) 22:08:33
あたらしいユーザーインターフェースシステム、Windows Presentation Frameworkについて語るスレ。
.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/
0699デフォルトの名無しさん2011/02/09(水) 00:27:29
>>698
デバッガでステップ実行してみると遅延実行か否かにかかわらず、BitmapFrame.Metadataを
Cloneした時点でexif情報は一応読み込まれてImageMetadataにコピーされているようです。
Cloneなのでもとのデータとは参照関係にないのですが、Streamを閉じると、コピーしたImageMetadata
の各項目がnullになってしまいます。(ImageMetadata自体はnullでない)。

謎な挙動なのですが、ImageMetadataはFreezable(DependencyObject)なので、もしかすると
もとのStreamとバインディングでもされているんでしょうか???

>>696
使ってみました。これは便利、と思いきや、BitmapFrameを使った方法では取得できる
項目にnullが返ってきたり、今ひとつ大丈夫なのかどうか心配です。
CanonicalNameが間違っているのでしょうか?
0700デフォルトの名無しさん2011/02/09(水) 00:49:50
>>699

api code packでexifをとろうとするとnullが帰ってくる件自己解決しました。
int dobleなどプリミティブ型はすべてNullable<T>になっていたため、
GetProperty<T>でTにNullable型を指定しないといけないのが原因でした。
0701デフォルトの名無しさん2011/02/09(水) 14:22:47
Canvasをいくつか重ねて一番手前のCanvasに貼り付けたButtonが
反応しないことってありますか?

今再現性100%で起きてるんですが・・・

モード切替ボタンが3つあって
起動直後にボタン1を押すと正常
その後ボタン2を一回押すとボタンの見た目だけ変わるけど
その先のコードが呼ばれない
もう一度ボタン2を押すとコードが正常に呼ばれる

これはボタン3つとも同じ結果になります
0702デフォルトの名無しさん2011/02/09(水) 14:57:59
ボタンにフォーカスが来るように組んでみましたが
結果は変わらずでした・・・
よくわからん・・・
0703デフォルトの名無しさん2011/02/09(水) 15:20:45
そーす
0704デフォルトの名無しさん2011/02/09(水) 15:32:05
ToggleButtonという話なら、Aeroな表示な時フォーカスを与えてからIsCheckedを変更しないとボーダー表示が残るバグがあるな。
バグ修正したカスタムコントロールで俺は対処した。
0705デフォルトの名無しさん2011/02/09(水) 15:36:59
>>703
晒せません・・・

>>704
Toggleじゃないです



あほなことをしてたかも・・・

Buttonが乗ってるCanvasにListBoxも乗ってるんですがこいつのSelectedIndexを
場合によっては-1にしてるんですが(つまり選択無し)こいつが影響してたようです・・・
0706デフォルトの名無しさん2011/02/09(水) 16:10:09
すみません
WPF SLともに似たような感じの別ソースを作って実験してみましたが
そちらでは再現しませんでした。

どうも今書いてるソースの問題のようです。

おさわがせしました・・・・
0707デフォルトの名無しさん2011/02/09(水) 19:24:27
関係あるかは分からないけど、自前コードでコントロールを色々ゴニョゴニョしていて
VisualChildrenに入れ忘れた時に似た症状(たまに再描画されたりされなかったり、
操作できたりできなかったり)を見たことがある。
0708デフォルトの名無しさん2011/02/09(水) 19:55:39
Wpfって簡単にいうと何ですか?例えば?
0709デフォルトの名無しさん2011/02/09(水) 20:54:49
WinFormにおけるSilverlight
0710デフォルトの名無しさん2011/02/09(水) 21:14:15
>>709
分かりやすいです。
0711デフォルトの名無しさん2011/02/09(水) 23:14:26
WPFはまだまだ流行りそうにないな。
0712デフォルトの名無しさん2011/02/09(水) 23:40:49
WPF、マイブームきてんね
0713デフォルトの名無しさん2011/02/09(水) 23:45:36
俺の中では、SL1.0が出た時からずっとSLブームなのに!
0714デフォルトの名無しさん2011/02/09(水) 23:52:05
私もマイブーム来てるよ。
0715デフォルトの名無しさん2011/02/10(木) 00:11:30
酷いメモリリークが起こっていたので強参照の関係を調査してみたら、
どうも表示上まったく無関係なコントロール間に参照ができ、
破棄したはずのコントロールへの参照が相当数残っている模様…

これ直しようがないよね…
0716デフォルトの名無しさん2011/02/10(木) 01:23:06
InputBinding で Modifier 無しのキーでコマンド叩こうと思ったらダメだった。

<UserControl.InputBindings>
<KeyBinding Key="A" Command="{Binding ACommand}" />
</UserControl.InputBindings>

みたいな操作を実装しようと思ったら、代替手段って何になるの?
07177062011/02/10(木) 11:06:17
>>707
確かにCanvasを継承してちょっと機能を持たせてる独自コントロールがいるんですよね・・・
ほかのパーツもいろいろ影響受けてるのかよくわからない動きも他にでてきてるし・・・

使いこなせれば確かにバインディング含めて便利なんだが便利機能がある分
ブラックボックス化してる部分が多くて返って大変かも・・・・
0718デフォルトの名無しさん2011/02/13(日) 01:41:17
DispatcherTimerはDispatcherキューに入れられるっていうからせいぜい60fpsくらいしか
でないと思ってて、実際どんなに小さい値をIntervalに入れても60くらいを示すんだけど、
Intervalを0にしたらウン万fpsたたき出す。どうなってんのこれ。

あとSystem.ThreadingのTimerなら120行けるんじゃと思って試してみたけどDispatcherTimer
と同じような精度だった。たしか分解能10msほどだっけ。

ソースはここのを使わせてもらった。
http://d.hatena.ne.jp/mitsc1729/20101106/1289045053
0719デフォルトの名無しさん2011/02/13(日) 14:07:57
Canvas.Leftなどをバインドさせる場合はどういう風に書けばいいのでしょうか?
0720デフォルトの名無しさん2011/02/13(日) 19:21:25
{Binding (Canvas.Left)}

連載:WPF入門
第5回 WPFの「データ・バインディング」を理解する
http://www.atmarkit.co.jp/fdotnet/chushin/introwpf_05/introwpf_05_02.html
0721デフォルトの名無しさん2011/02/14(月) 01:48:45
RadioButtonをGroupNameでグループ化した物を
上から順に012とか読み取れるような方法って標準でありますか?
0722デフォルトの名無しさん2011/02/14(月) 23:24:00
「読み取る」が何を意味しているのか、ItemsSource内のRadioButtonなのか、
ViewModelからBind経由で値をとりたいのか、それともView側で直接とりたいのかetc...
そもそもの目的が分からないからなんとも言えないが色々と手段はある。
0723デフォルトの名無しさん2011/02/18(金) 17:19:09
CanvasのEffect設定すると、ChildrenのUIElementもEffect設定されてしまう・・・
CanvasだけにEffectを設定できないの?
0724デフォルトの名無しさん2011/02/18(金) 21:10:08
背景ブラシだけにエフェクトを適用したいということ?
BorderかRectangleでも置いとけ
0725デフォルトの名無しさん2011/02/19(土) 21:54:47.64
コントロールの幅がそれぞれ[Auto][ストレッチ][ストレッチ][Auto]
なレイアウトにできるのはGridだけ?ストレッチが1つならDockでも可能だけど。
0726デフォルトの名無しさん2011/02/20(日) 01:57:34.94
テキストブロックの文字列の一部を修飾する方法を教えてください。

<TextBlock>
前半<Bold>太字</Bold>後半
</TextBlock>

リテラルなら上で良いけど、前半、太字、後半をバインドする方法が分からないです。
0727デフォルトの名無しさん2011/02/20(日) 02:50:33.99
面白い発想だな
0728デフォルトの名無しさん2011/02/20(日) 03:02:36.10
TextBlockの子はInlines。
リテラルに見えるが<Run>を省略できるだけ。

Inlineクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.documents.inline.aspx
0729デフォルトの名無しさん2011/02/20(日) 04:16:14.72
コンバーター書いて渡しちゃえとか思うのはだめなんだろうか
0730デフォルトの名無しさん2011/02/20(日) 12:11:14.43
ありがとうございます。
XAMLで書ける要素はXAMLで書きたいな、と思っております。

実際>>728さんのアドバイスで試してみて2つ問題が。

・Run.Textは依存プロパティではないからバインドできない。

・問題というほどじゃないのだけど、要素をきれいに並べたくて下のような書き方すると改行部分で空白が入る。
<TextBlock>
<Run>前半</Run>
<Bold>太字</Bold>
<Run>後半</Run>
</TextBlock>

>>726の書き方だと「前半太字後半」となるのが、上だと「前半 太字 後半」になってしまう。
<Run>前半</Run><Bold>太字</Bold><Run>後半</Run> と書けばいいんだけど…。

>>729さんの言うようにコンバータ作るのが良いのか、そもそも初手の発想が駄目で
テキストの一部修飾はもっとスマートなやり方があるんでしょうか?
0731デフォルトの名無しさん2011/02/20(日) 12:16:51.12
あとはいい結果になるかどうかわからんが

<Stackpanel>
<TextBlock/>
<TextBlock/>
<TextBlock/>
</Stackpanel>

こんな感じでTextBlockが横に並ぶようにしちゃうとか
0732デフォルトの名無しさん2011/02/20(日) 12:45:12.42
>>731
条件後出しになってごめんなさい。
「前半太字後半」で1文として扱われてほしいのです。

TextBlockとして並べてしまうとたとえば改行の際の動作がおかしいので。

<希望の動作>
前半太字後


<TextBlock並べた場合>
前半太字後
____半
0733デフォルトの名無しさん2011/02/20(日) 13:07:05.70
素直にRichTextBox使ったらどう?
0734デフォルトの名無しさん2011/02/20(日) 13:27:18.80
RichTextBox使っても結局Inlineで指定するんだから何も変わらない
0735デフォルトの名無しさん2011/02/20(日) 14:21:24.51
どなたかご存知の方教えてください。
VisualStudio2005 C# Designer を使用して Form を作成中です。
GUI 上に Panel ってのを追加してみたけど、やっぱ止めようとしてます。
で削除したいのですが、削除、切り取りとも、
苦労して配置したボタンその他みんな道連れになって削除されてしまいます。
パネルだけを削除する方法は?
0736デフォルトの名無しさん2011/02/20(日) 14:23:10.91
スレ違い
0737デフォルトの名無しさん2011/02/20(日) 14:23:47.08
了解。
ではどこに?
0738デフォルトの名無しさん2011/02/20(日) 14:24:38.90
ふらっとか相談室
0739デフォルトの名無しさん2011/02/20(日) 14:26:22.62
というかWPFと関係ないし、VSスレで聞いても怒られるような質問だぞ。
本屋やネットみて基本身につけたほうがいい。
0740デフォルトの名無しさん2011/02/20(日) 14:26:57.46
昨日わんくま行った奴いる?
0741デフォルトの名無しさん2011/02/22(火) 08:38:29.50
どなたかご存知の方お願いします。
VerticalScrollBarVisibilityがtrueなRichTextBoxがありますが、Documentプロパティを入れ替えて行数の多い文書を投入してもスクロールが有効になりません。何か手続き漏れているでしょうか?
0742デフォルトの名無しさん2011/02/22(火) 09:13:30.46
trueって何じゃ?Autoってことか?
0743デフォルトの名無しさん2011/02/22(火) 09:27:27.98
>>742
すみません741ですがautoでした。
0744デフォルトの名無しさん2011/02/22(火) 09:44:49.59
>>740
あんなの行ってなにが得られるというのだね

わんくま(笑)
0745デフォルトの名無しさん2011/02/22(火) 15:20:03.67
わんくまはまず桁外れに脆弱な鯖どうにかすべき
0746デフォルトの名無しさん2011/02/22(火) 17:10:41.21
>>745
kwsk
0747デフォルトの名無しさん2011/02/22(火) 18:24:58.93
わんくまサーバー使ってるサイトに繋がりにくいし、それのことかな
0748デフォルトの名無しさん2011/02/22(火) 19:15:31.68
すげーよく落ちるよな。
あれどうなってんのw
0749デフォルトの名無しさん2011/02/22(火) 22:27:52.26
わんくまって何かいいことあるの?
0750デフォルトの名無しさん2011/02/23(水) 00:48:41.94
>>748
よく落ちるんじゃなくて、
たまに運がいいと繋がるって感触なんだが……。
0751デフォルトの名無しさん2011/02/23(水) 08:26:50.98
検索結果からわんくまに飛んだら500で落ちたでござる
0752デフォルトの名無しさん2011/02/24(木) 07:21:13.74
WPFを勉強するのにいい本ってありますか?
0753デフォルトの名無しさん2011/02/24(木) 08:01:10.97
741ですが、とりあえず解決しました。
Ribbon UIのサンプルをいじって実験していたところ期待通りの動作とならず質問しましたが、シンプルな WPFアプリケーションで試したところ問題ありませんでした。
Ribbon時の原因はまだ特定できていませんがリフレクションからみで何かあるのかなと推測してます。
0754デフォルトの名無しさん2011/02/24(木) 08:35:27.75
>>752
エッセンシャル
0755デフォルトの名無しさん2011/02/24(木) 09:35:38.48
高いのよねあれ
0756デフォルトの名無しさん2011/02/24(木) 09:38:49.08
ブラウザプラグインのsilverlightもこっちで扱ってはどうか?
向こうのスレは役にたたない
0757デフォルトの名無しさん2011/02/24(木) 09:46:44.76
2chブラウザ入れてNGリストで消してスルーしとけ。

WPFに共通する話題ならこっちでやってもいい。
共通する話題か判断できる人は自己解決するだろうけどさ
0758デフォルトの名無しさん2011/02/24(木) 09:47:01.82
どうせ書き込んでる人はほとんど同じだろw
SilverlightはWPFじゃなくて.NET Frameworkのサブセットだよ
SilverlightでEntity Frameworkを使うときの話とかWPFスレでやるの?
0759デフォルトの名無しさん2011/02/24(木) 16:30:35.63
皆さん似たようなページを大量に印刷してる時どうしてます?
やはりページ毎に全ての印刷要素のインスタンスを作らないと駄目ですかね?
ページ数多いとメモリ消費が凄いことになりそうで。
WinFormsはそこらへん効率的だったのに・・・
0760デフォルトの名無しさん2011/02/24(木) 16:44:35.34
逆だろ…
0761デフォルトの名無しさん2011/02/24(木) 19:55:00.31
わんくまustで見たけど、IDataError なんとか使った検証の話や、MVVM パターンをT4で生成する話とかあったな。
あと TextOptions 使ってテキストボックスの文字表示を調整したり、MVVM Light使え等の小技も結構紹介されてた。
しかしデモ見てたら、MVVMって検証含めるとイベントハンドラよりコードが肥大化する印象があるけどどうよ。
0762デフォルトの名無しさん2011/02/24(木) 21:05:14.26
MVVMって基本的にテストの手間を減らすためのものだから。
テストしないんだったらVMなんかいらん。
0763デフォルトの名無しさん2011/02/24(木) 21:26:00.15
ビューレベルの検証をなんでVMに書くかといえば、ひとえにUIなしで単体テストしたいから。それだけ。
テストの手間を考えたら構造が少々複雑になったりコードが増えたりするくらいのコストは無視できる。
MVVMでないとWPFのバインディングを活用できないみたいな誤解があるけど
実際は全然そんなことない。
0764デフォルトの名無しさん2011/02/24(木) 21:34:26.89
ああ、だから流行らないんだな
0765デフォルトの名無しさん2011/02/24(木) 21:42:26.47
いや、別の理由だろ。どう考えても。
0766デフォルトの名無しさん2011/02/24(木) 21:46:59.47
MVVMは複雑な構造を大量の単純作業に分解できるのが利点だと思ってたわ
0767デフォルトの名無しさん2011/02/24(木) 22:36:25.69
なんかめんどくさいからコードビハインドをDataContextに突っ込んでる。
0768デフォルトの名無しさん2011/02/25(金) 10:27:22.25
WPFとタッチパネルでこんなUI作ってみたい。
http://www.youtube.com/watch?v=6Cf7IL_eZ38
0769デフォルトの名無しさん2011/02/25(金) 10:59:31.09
なにこれ・・・超かっこいい
0770デフォルトの名無しさん2011/02/25(金) 12:34:57.95
A型の俺は指紋がどうなるのか気になる
0771デフォルトの名無しさん2011/02/25(金) 13:53:41.82
メガネ拭きを持ち歩いているA型の俺に隙はなかった
0772デフォルトの名無しさん2011/02/25(金) 16:07:03.72
水酸化ナトリウム溶液で指紋を消した俺は、もちろんA型だ。
0773デフォルトの名無しさん2011/02/25(金) 16:12:08.39
A型スゴスギワロタ
0774デフォルトの名無しさん2011/02/25(金) 16:12:46.39
一方俺は該当タッチパネルでも使える手袋を・・・
0775デフォルトの名無しさん2011/02/25(金) 16:13:53.81
そんな俺は+AB型
0776デフォルトの名無しさん2011/02/25(金) 16:24:09.09
金属製のかっこいいタッチペン(スタイラス)売ってるぜ
静電容量式で使えないやつもあるから購入前に要チェック。

A型の俺はiPodにも自作タッチペン。
導電スポンジ切ってボールペンの芯の替わりに詰め込むだけの単純な工作だ。
0777デフォルトの名無しさん2011/02/25(金) 16:27:57.98
>>776
kwsk
0778デフォルトの名無しさん2011/02/25(金) 16:30:36.25
>>777
iPod タッチペン 自作 あたりでググると作り方書いてあるよ。
導電スポンジはAmazonあたりで売ってる。
0779デフォルトの名無しさん2011/02/25(金) 16:46:12.17
>>778
ほほぅ〜 これはよさげだw
勉強になったよ ありがとう
0780デフォルトの名無しさん2011/02/25(金) 16:47:05.10
ButtonとTextBoxがあるユーザコントロール作ってDataGrid上に表示したところ、
タブで、そのセルにフォーカスあてると一旦ユーザコントロールにフォーカスが移って、
次にTextBoxという具合になるんですが、
いきなりTextBoxにフォーカスあてるためにはどうしたらいいですか?

0781デフォルトの名無しさん2011/02/25(金) 19:30:03.07
指紋付くの嫌だから、タッチパネル使う時はペンを持ちたいけれど
ピンチイン・ピンチアウト等、二本指必要な操作が問題だ。

つか、将来的には
直接触らなくても、近付けて指を振るだけで動く様にして欲しいかも。
0782デフォルトの名無しさん2011/02/25(金) 20:51:20.14
B型の俺でも指紋は気になる
0783デフォルトの名無しさん2011/02/25(金) 21:41:02.10
AB型なら着いた指紋でアート、これよ
0784デフォルトの名無しさん2011/02/25(金) 21:46:21.08
お前らが血液型で盛り上がってるとは。失望した
0785デフォルトの名無しさん2011/02/26(土) 00:09:44.27
>>780
ContentControlとかはデフォルトだとフォーカスを受け取るから
タブ押してフォーカス移動しながらSnoopとかでフォーカスを持ってるコントロールをチェックしてみ。
07866272011/02/26(土) 02:11:22.84
WPF超初心者です、xamlとコードビハインドの関係を調べています。
例えばWindowが持っているResourceCollectionにSolidColorBrushが入っているとして、それを子ボタンの背景に手動で適用する場合、

MyButton.Background = (Brush)MyStaticResouceExtension.ProvideValue(IServiceProvider);

ここの「IServiceProvider」にはどこのインスタンスを指定すればよいのでしょうか?
0787デフォルトの名無しさん2011/02/26(土) 03:16:56.33
TryFindResourceやSetResourceReferenceをなぜ使わない?
07887862011/02/26(土) 03:34:20.42
>>787
色を塗ったり、塗る方法が知りたいのではなくて
xamlが裏でどのように変換されているのかを調べています。
0789デフォルトの名無しさん2011/02/26(土) 06:54:31.60
自分でマークアップ拡張書いてみてProvideValueに何が渡ってくるか調べてみればいいよ
0790デフォルトの名無しさん2011/02/26(土) 17:13:13.31
>>781
タッチパネル対応箸の出番だな
0791デフォルトの名無しさん2011/02/26(土) 18:04:38.98
>>781
光学式のは厳密には触れなくても反応する。
どこまで指を上げればいいのか分からなくて慣れるまでダブルクリックできないけど。
0792デフォルトの名無しさん2011/02/26(土) 18:08:24.11
音波式って最近見ないよね
0793デフォルトの名無しさん2011/02/26(土) 23:39:43.78
これで、DELLがこの間出したばかりのST2220T(22"IPS、光学式タッチパネル)を
紹介する流れができたわけですね。
0794デフォルトの名無しさん2011/02/27(日) 00:07:54.77
既に画面の前でダンスして操作する時代に入っている
0795デフォルトの名無しさん2011/02/27(日) 14:34:22.89
最近のスレの流れでSnoopの存在知りました。
おまいらありがとう
0796デフォルトの名無しさん2011/02/27(日) 14:40:11.05
>>793
発売から1週間経ってないのに3万とはタッチパネルも安くなったもんだな。
1台買おうかと思って製品仕様見てきた。
IPSなのはいいけどグレアパネル使ってるのか。ノングレアだったら買ってたのに…
0797デフォルトの名無しさん2011/02/27(日) 15:36:11.56
一台グレアパネルを置いておくと後ろを確認するのに便利だぞ。
IOのもNANAOのもグレアパネルだしな……
0798デフォルトの名無しさん2011/02/27(日) 15:37:51.25
命を狙われる開発者wwww
■ このスレッドは過去ログ倉庫に格納されています