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/
0665デフォルトの名無しさん
2011/02/05(土) 12:27:42基本的に継承しても意味のないつくりになっていて、継承するのは継承専用に設計されたクラスだけ
0666デフォルトの名無しさん
2011/02/05(土) 12:38:540667デフォルトの名無しさん
2011/02/05(土) 12:48:33というか派生クラスに書き換えてもらうためにprotectedにしてるんじゃないのか
0668デフォルトの名無しさん
2011/02/05(土) 12:49:48やたらと細かい仕様があるからな
いかに基底クラスの変更を危険視してるかがわかる
約束事が通じる範囲なら勝手だけど、不特定多数向けのクラスライブラリ向けなら
protectedフィールドはpublicフィールドと何も違わない
0669デフォルトの名無しさん
2011/02/05(土) 16:27:22つーか、ここWPFのスレなんだけど。
一般論展開したいなら余所のスレに行けばいい。
0670デフォルトの名無しさん
2011/02/05(土) 16:30:01継承前提で使うクラスと、コントロールの継承とでは意味が違うんですが。
0671デフォルトの名無しさん
2011/02/05(土) 16:33:09両方とも俺じゃなくて>>647に言えよ
0672デフォルトの名無しさん
2011/02/05(土) 16:35:24継承によって小単位でカプセル化された特性やポリシーを
いくつも組み合わせて提供することができないから
「継承は悪」と思ってきたけど、そうじゃないの?
0673デフォルトの名無しさん
2011/02/05(土) 18:30:07>>ハリウッドの原則
もしよければ参考になる記事をおしえてくださ〜い。
>protected変数を書き換え元クラスを制御ようなアホがいる限り
継承したクラスが親クラスのprotectedで定義されている変数を直接いじるって解釈でOK?
0674デフォルトの名無しさん
2011/02/05(土) 18:55:20たいして難しくないから「ハリウッドの原則」でググってみればおk。
多分大抵のプログラマが無意識にやっているはず。
> OK?
変数に限らず、親クラスの挙動を子クラスが制御すること自体マズい
0675デフォルトの名無しさん
2011/02/05(土) 19:01:080676デフォルトの名無しさん
2011/02/05(土) 19:18:590677デフォルトの名無しさん
2011/02/05(土) 19:44:36protectedまでしかない言語じゃないんだし、
書き換えられたら困る場合はprivateにするんだよ。
違う言語の話が混じってないか?
0678デフォルトの名無しさん
2011/02/05(土) 20:00:27VSじゃなくてExpression Blendの話?
0679デフォルトの名無しさん
2011/02/06(日) 09:16:03VS(VS10)の話です。
具体的には、↓です。
カスタムコンボボックス(ComboEx)にDCountという名前のプロパティを作ったんですけど、
そのCountの値によって、中身の個数をかえたいと思っています。
たとえば、
DCount = 3 → 1月,2月,3月
DCount = 4 → 1月,2月,3月,4月
DCount 1 〜 12 以外 → 1月〜12月まですべて
のように、DCountの値とComboExのItemを対応させたいんです。
ためしに、DCountを考慮せず、
1) ComboExクラスで、1月,2月をaddしたものを、Main.Xaml(デザイナ)にツールボックスから配置する
2) 実行すると1月,2月が表示される
3) ComboExクラスで、さらに3月をaddする
4) Main.Xaml(デザイナ) には、1月,2月 が表示されたまま。
どのように実装すればよいか、アドバイスいただけたら嬉しいです(´Д⊂グスン
0680デフォルトの名無しさん
2011/02/06(日) 09:37:050681デフォルトの名無しさん
2011/02/06(日) 09:42:03http://ideone.com/pbfk8
0682デフォルトの名無しさん
2011/02/07(月) 12:08:16EventTriggerで頑張るしかないのかな。
MVVM light使ってます。
0683デフォルトの名無しさん
2011/02/07(月) 12:59:05ListBoxから継承するかコードビハインドかビヘイビアでコード書く。
ビューのコードからコレクションを並び替えるには、CollectionViewを使う。
0684デフォルトの名無しさん
2011/02/07(月) 13:18:04もっさりしたアニメーションでチェックが入るんだけど
どうにかならないのでしょうか?
0685デフォルトの名無しさん
2011/02/07(月) 13:48:21自作しちゃう?
0686デフォルトの名無しさん
2011/02/07(月) 14:44:05テンプレートを入れ替える
http://msdn.microsoft.com/ja-jp/library/ms752319.aspx
これにはアニメーションは含まれてないっぽいので単にコピペして使えばアニメーションしなくなるはず
0687デフォルトの名無しさん
2011/02/07(月) 15:47:050688デフォルトの名無しさん
2011/02/07(月) 16:21:48{Binding Value , StringFormat={}{0:N0}Hz}"
{Binding Value , StringFormat={}{0,4:F1}℃}"
{Binding Value , StringFormat={}{0,5:F1}%}"
{Binding Value , StringFormat={}{0,5:N0}rpm}
やっとWPF3.5で動くようにしたのにWPF4にしたら動かなくなってしまった(XamlReader経由)。
もう泣きたい。
0689デフォルトの名無しさん
2011/02/07(月) 17:49:42Expression Blendには、デフォルトのテンプレートをコピーした上でそれをベースにして編集する機能がある
BlendないならコントロールのTemplateプロパティの値をXamlWriter.Save
0690デフォルトの名無しさん
2011/02/08(火) 10:01:38XBAPでボタンを配置してボタンを押すと他のWebページに画面を遷移させたいけど
作法が解りません・・。
ちなみに・・
Private Sub btnBack_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnBack.Click
NavigationService.Navigate("http://www.yahoo.co.jp")
End Sub
としてもブラウザ画面にhttp://www.yahoo.co.jpと文字が表示されてしまいます。
0691デフォルトの名無しさん
2011/02/08(火) 10:17:14によると、HTMLページのFrame内でXBAPをホストしている場合、
JavaScriptのwindowオブジェクトが取得できるらしいから
あとはJavaScriptでのページの移動と同じ方法が使えるはず。
でも正直XBAPなんか使わない方がいいよ。WPFなら普通のアプリとして作ってClickOnceで配布するか、
ブラウザで動かしたかったらWPFよりもSilverlightを強く推奨。
SilverlightならブラウザやHTMLページの操作も強力にサポートされてる。
0692デフォルトの名無しさん
2011/02/08(火) 10:27:07Private Sub goButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
Me.NavigationService.Navigate(New Uri(Me.addressTextBox.Text))
End Sub
Vb使わんから良く解らんが、MsdnさんはUriオブジェクト使えと言っている
0693デフォルトの名無しさん
2011/02/08(火) 10:39:17ありがとうございます。Silverlightは触ったことすら無いので一度勉強してみます。
>>692
ぉお!まさにこれでした。・・・って試してみたらIE(XBAP)が終了した・・。
なるほど、そういうものなんですね。勉強になりました。
御返答頂いた方々、ありがとうございました。もっと功夫積んできます。
0694デフォルトの名無しさん
2011/02/08(火) 20:37:39るのですが、ファイルがロックされてしまい、exif情報を取り出したファイルの操作
ができません。IDisposableでないので、Dispose()もできず、freeze()してみても変
わりません。どうしたら、ロックを解除できるでしょうか?
0695デフォルトの名無しさん
2011/02/08(火) 20:40:040696デフォルトの名無しさん
2011/02/08(火) 21:22:56取れるのはOS依存だけど、そのOSのExplorerで読める物は大丈夫なはず
http://code.msdn.microsoft.com/WindowsAPICodePack
0697デフォルトの名無しさん
2011/02/08(火) 23:10:38Stream渡しでStreamをCloseするとファイルがロックされることはなくなりましたが、
こんどは BitmapFrame.MetadataがStreamのクローズと共にnullになってしまい
ました。MetadataをCloneしても、CloneCurrentValueしても変わりません。
Streamをクローズするまえに必要なタグ情報は全部読みだしておくことで回避していますが。。。
>>696
なんと! そんないいものがあったんですか? apicodepackは使っているんですが
知りませんでした。早速調べてみます。
0698デフォルトの名無しさん
2011/02/08(火) 23:16:17Streamだけのオーバーロードだと、遅延読み込みになるっぽい
http://msdn.microsoft.com/ja-jp/library/ms615998.aspx
http://msdn.microsoft.com/ja-jp/library/system.windows.media.imaging.bitmapcacheoption.aspx
0699デフォルトの名無しさん
2011/02/09(水) 00:27:29デバッガでステップ実行してみると遅延実行か否かにかかわらず、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:50api code packでexifをとろうとするとnullが帰ってくる件自己解決しました。
int dobleなどプリミティブ型はすべてNullable<T>になっていたため、
GetProperty<T>でTにNullable型を指定しないといけないのが原因でした。
0701デフォルトの名無しさん
2011/02/09(水) 14:22:47反応しないことってありますか?
今再現性100%で起きてるんですが・・・
モード切替ボタンが3つあって
起動直後にボタン1を押すと正常
その後ボタン2を一回押すとボタンの見た目だけ変わるけど
その先のコードが呼ばれない
もう一度ボタン2を押すとコードが正常に呼ばれる
これはボタン3つとも同じ結果になります
0702デフォルトの名無しさん
2011/02/09(水) 14:57:59結果は変わらずでした・・・
よくわからん・・・
0703デフォルトの名無しさん
2011/02/09(水) 15:20:450704デフォルトの名無しさん
2011/02/09(水) 15:32:05バグ修正したカスタムコントロールで俺は対処した。
0705デフォルトの名無しさん
2011/02/09(水) 15:36:59晒せません・・・
>>704
Toggleじゃないです
あほなことをしてたかも・・・
Buttonが乗ってるCanvasにListBoxも乗ってるんですがこいつのSelectedIndexを
場合によっては-1にしてるんですが(つまり選択無し)こいつが影響してたようです・・・
0706デフォルトの名無しさん
2011/02/09(水) 16:10:09WPF SLともに似たような感じの別ソースを作って実験してみましたが
そちらでは再現しませんでした。
どうも今書いてるソースの問題のようです。
おさわがせしました・・・・
0707デフォルトの名無しさん
2011/02/09(水) 19:24:27VisualChildrenに入れ忘れた時に似た症状(たまに再描画されたりされなかったり、
操作できたりできなかったり)を見たことがある。
0708デフォルトの名無しさん
2011/02/09(水) 19:55:390709デフォルトの名無しさん
2011/02/09(水) 20:54:490710デフォルトの名無しさん
2011/02/09(水) 21:14:15分かりやすいです。
0711デフォルトの名無しさん
2011/02/09(水) 23:14:260712デフォルトの名無しさん
2011/02/09(水) 23:40:490713デフォルトの名無しさん
2011/02/09(水) 23:45:360714デフォルトの名無しさん
2011/02/09(水) 23:52:050715デフォルトの名無しさん
2011/02/10(木) 00:11:30どうも表示上まったく無関係なコントロール間に参照ができ、
破棄したはずのコントロールへの参照が相当数残っている模様…
これ直しようがないよね…
0716デフォルトの名無しさん
2011/02/10(木) 01:23:06<UserControl.InputBindings>
<KeyBinding Key="A" Command="{Binding ACommand}" />
</UserControl.InputBindings>
みたいな操作を実装しようと思ったら、代替手段って何になるの?
0717706
2011/02/10(木) 11:06:17確かにCanvasを継承してちょっと機能を持たせてる独自コントロールがいるんですよね・・・
ほかのパーツもいろいろ影響受けてるのかよくわからない動きも他にでてきてるし・・・
使いこなせれば確かにバインディング含めて便利なんだが便利機能がある分
ブラックボックス化してる部分が多くて返って大変かも・・・・
0718デフォルトの名無しさん
2011/02/13(日) 01:41:17でないと思ってて、実際どんなに小さい値を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:570720デフォルトの名無しさん
2011/02/13(日) 19:21:25連載:WPF入門
第5回 WPFの「データ・バインディング」を理解する
http://www.atmarkit.co.jp/fdotnet/chushin/introwpf_05/introwpf_05_02.html
0721デフォルトの名無しさん
2011/02/14(月) 01:48:45上から順に012とか読み取れるような方法って標準でありますか?
0722デフォルトの名無しさん
2011/02/14(月) 23:24:00ViewModelからBind経由で値をとりたいのか、それともView側で直接とりたいのかetc...
そもそもの目的が分からないからなんとも言えないが色々と手段はある。
0723デフォルトの名無しさん
2011/02/18(金) 17:19:09CanvasだけにEffectを設定できないの?
0724デフォルトの名無しさん
2011/02/18(金) 21:10:08BorderかRectangleでも置いとけ
0725デフォルトの名無しさん
2011/02/19(土) 21:54:47.64なレイアウトにできるのはGridだけ?ストレッチが1つならDockでも可能だけど。
0726デフォルトの名無しさん
2011/02/20(日) 01:57:34.94<TextBlock>
前半<Bold>太字</Bold>後半
</TextBlock>
リテラルなら上で良いけど、前半、太字、後半をバインドする方法が分からないです。
0727デフォルトの名無しさん
2011/02/20(日) 02:50:33.990728デフォルトの名無しさん
2011/02/20(日) 03:02:36.10リテラルに見えるが<Run>を省略できるだけ。
Inlineクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.documents.inline.aspx
0729デフォルトの名無しさん
2011/02/20(日) 04:16:14.720730デフォルトの名無しさん
2011/02/20(日) 12:11:14.43XAMLで書ける要素は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条件後出しになってごめんなさい。
「前半太字後半」で1文として扱われてほしいのです。
TextBlockとして並べてしまうとたとえば改行の際の動作がおかしいので。
<希望の動作>
前半太字後
半
<TextBlock並べた場合>
前半太字後
____半
0733デフォルトの名無しさん
2011/02/20(日) 13:07:05.700734デフォルトの名無しさん
2011/02/20(日) 13:27:18.800735デフォルトの名無しさん
2011/02/20(日) 14:21:24.51VisualStudio2005 C# Designer を使用して Form を作成中です。
GUI 上に Panel ってのを追加してみたけど、やっぱ止めようとしてます。
で削除したいのですが、削除、切り取りとも、
苦労して配置したボタンその他みんな道連れになって削除されてしまいます。
パネルだけを削除する方法は?
0736デフォルトの名無しさん
2011/02/20(日) 14:23:10.910737デフォルトの名無しさん
2011/02/20(日) 14:23:47.08ではどこに?
0738デフォルトの名無しさん
2011/02/20(日) 14:24:38.900739デフォルトの名無しさん
2011/02/20(日) 14:26:22.62本屋やネットみて基本身につけたほうがいい。
0740デフォルトの名無しさん
2011/02/20(日) 14:26:57.460741デフォルトの名無しさん
2011/02/22(火) 08:38:29.50VerticalScrollBarVisibilityがtrueなRichTextBoxがありますが、Documentプロパティを入れ替えて行数の多い文書を投入してもスクロールが有効になりません。何か手続き漏れているでしょうか?
0742デフォルトの名無しさん
2011/02/22(火) 09:13:30.460743デフォルトの名無しさん
2011/02/22(火) 09:27:27.98すみません741ですがautoでした。
0744デフォルトの名無しさん
2011/02/22(火) 09:44:49.59あんなの行ってなにが得られるというのだね
わんくま(笑)
0745デフォルトの名無しさん
2011/02/22(火) 15:20:03.670746デフォルトの名無しさん
2011/02/22(火) 17:10:41.21kwsk
0747デフォルトの名無しさん
2011/02/22(火) 18:24:58.930748デフォルトの名無しさん
2011/02/22(火) 19:15:31.68あれどうなってんのw
0749デフォルトの名無しさん
2011/02/22(火) 22:27:52.260750デフォルトの名無しさん
2011/02/23(水) 00:48:41.94よく落ちるんじゃなくて、
たまに運がいいと繋がるって感触なんだが……。
0751デフォルトの名無しさん
2011/02/23(水) 08:26:50.980752デフォルトの名無しさん
2011/02/24(木) 07:21:13.740753デフォルトの名無しさん
2011/02/24(木) 08:01:10.97Ribbon UIのサンプルをいじって実験していたところ期待通りの動作とならず質問しましたが、シンプルな WPFアプリケーションで試したところ問題ありませんでした。
Ribbon時の原因はまだ特定できていませんがリフレクションからみで何かあるのかなと推測してます。
0754デフォルトの名無しさん
2011/02/24(木) 08:35:27.75エッセンシャル
0755デフォルトの名無しさん
2011/02/24(木) 09:35:38.480756デフォルトの名無しさん
2011/02/24(木) 09:38:49.08向こうのスレは役にたたない
0757デフォルトの名無しさん
2011/02/24(木) 09:46:44.76WPFに共通する話題ならこっちでやってもいい。
共通する話題か判断できる人は自己解決するだろうけどさ
0758デフォルトの名無しさん
2011/02/24(木) 09:47:01.82SilverlightはWPFじゃなくて.NET Frameworkのサブセットだよ
SilverlightでEntity Frameworkを使うときの話とかWPFスレでやるの?
0759デフォルトの名無しさん
2011/02/24(木) 16:30:35.63やはりページ毎に全ての印刷要素のインスタンスを作らないと駄目ですかね?
ページ数多いとメモリ消費が凄いことになりそうで。
WinFormsはそこらへん効率的だったのに・・・
0760デフォルトの名無しさん
2011/02/24(木) 16:44:35.340761デフォルトの名無しさん
2011/02/24(木) 19:55:00.31あと TextOptions 使ってテキストボックスの文字表示を調整したり、MVVM Light使え等の小技も結構紹介されてた。
しかしデモ見てたら、MVVMって検証含めるとイベントハンドラよりコードが肥大化する印象があるけどどうよ。
0762デフォルトの名無しさん
2011/02/24(木) 21:05:14.26テストしないんだったらVMなんかいらん。
0763デフォルトの名無しさん
2011/02/24(木) 21:26:00.15テストの手間を考えたら構造が少々複雑になったりコードが増えたりするくらいのコストは無視できる。
MVVMでないとWPFのバインディングを活用できないみたいな誤解があるけど
実際は全然そんなことない。
0764デフォルトの名無しさん
2011/02/24(木) 21:34:26.89■ このスレッドは過去ログ倉庫に格納されています