トップページ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/
0628デフォルトの名無しさん2011/01/29(土) 11:19:31
ここではMVVMはもう上のレイヤの話なのでひとまず忘れてくれ。
UserControlは振る舞いとビューを分離できない。
カスタムコントロールは振る舞いとビューが分離されていて、必要ならビューを差し替えることができる。
ここでいうビューはMVVMのViewのことじゃなくて、たとえばコントロールの文字列型のプロパティを
TextBlock使って表示するかボタンのキャプションにするかというようなUIの実装の詳細という意味で、
端的にはコントロールテンプレートのこと。振る舞いはコードビハインド。
0629デフォルトの名無しさん2011/01/29(土) 14:43:02
トン。どちらもただのコントロールで提供機能が違うだけなのね。
0630デフォルトの名無しさん2011/01/29(土) 19:21:18
スレ違いかもしれないんですが、
MessageBox的なものを自分で作りたいんですが、
はい/いいえ/再試行/キャンセルなどを言語環境に合わせて変えたい場合どうすればいいですか?
自分で言語設定ファイル置くんじゃなくて、インストールされてる言語パックなんかから取ってきたい。
メッセージボックスで使われている語彙だけでいいんです。
0631デフォルトの名無しさん2011/01/29(土) 21:30:18
そういう機能はOSに無い
0632デフォルトの名無しさん2011/01/29(土) 21:35:42
一旦MessageBox.Showしといてフックでテキスト横取りした上で表示前に殺すとか思いついたが
そもそも実現できるだろうか
0633デフォルトの名無しさん2011/01/29(土) 22:18:37
これでいいんじゃない?
http://ideone.com/yf6La
0634デフォルトの名無しさん2011/02/01(火) 10:56:12
MessageBox.Show ダイアログのボタンの見た目がテーマと異なるもんだから、「Windows Aero を適用しているのにクラシックなボタン」という中途半端なのをどうにかしてほしいのだが、
マイクロソフトはいつになったらそういう細かい部分を改修してくれるんだろう。
機能的には不備はないんだけれど見た目がね。人は見た目が9割。
0635デフォルトの名無しさん2011/02/01(火) 13:17:14
お前が無知なだけ
0636デフォルトの名無しさん2011/02/01(火) 13:17:57
ちょっと調べりゃ解決できるこったろうに
0637デフォルトの名無しさん2011/02/01(火) 16:46:50
説明が下手でMVVMもろくに理解出来てないのですが、
例えばあるネットワークアプリにおいて、コアの機能(例えば通信等)を別のライブラリに置くとすると、
モデルとなるものは、ライブラリの中に書くと思いますが、
この場合はINotifyPropertyChangedやコレクションはObservableCollection(or INotifyCollectionChanged)を予め使い、モデルを実装した方が
GUIとの連携の際楽かと思いますが、この実装は正しいでしょうか?
(予め実装するのはなんとなく気持ち悪い気はしますが・・・)
またその場合に、対応するVisualModelを作成せず、直接MainWindow等のViewModelへモデルのインスタンスを置くのは
微妙な実装ですかね?

あとライブラリが自分の作った物では無い場合は、ラッパークラス(対応するVisualModel)を作ったりするのでしょうか?
変更通知イベント等を捕まえるのかな・・・
0638デフォルトの名無しさん2011/02/01(火) 19:57:50
>>518の公式ドキュメントによると、
モデルがINotifyPropertyChangedやINotifyCollectionChangedを実装している場合は
わざわざViewModelでプロパティを全部ラップしなくてもそのまま公開してViewとバインドしても構わない
0639デフォルトの名無しさん2011/02/02(水) 01:02:48
>>638
レスありがとうございます
なるほど、>>518のドキュメントってそういう事等が書いてあるんですね・・・と思ったけど英語・・・orz
時間あるときにでも頑張って呼んでみたいと思います!
0640デフォルトの名無しさん2011/02/02(水) 05:13:15
>>637
ネットワークをコア機能と考えてる時点でもうmvvmとは離れてるんジャマイカ?

prismはべつにmvvmのフレームワークでもなんでもなくて、コンパウンド・アプリケーションのフレームワークが最近は
mvvmもサポートしてますよ〜ってだけだから、それを参考にしてmvvmのベスト
プラクティスでございますっていうのは、よく考えたほうがいいぞ。
0641デフォルトの名無しさん2011/02/02(水) 20:02:19
質問です

コンボボックスを継承したカスタムコントロールを作ったんですけど、
デザイナでそのコントロールを置くと、中のアイテムが表示されません。
デザイナでもアイテムが表示されるようにするにはどうすればいいんですか?


0642デフォルトの名無しさん2011/02/04(金) 02:00:47
そもそも継承するという発想自体がアウト。

テンプレートやビヘイビアで改造するのが流儀なんですが・・・
0643デフォルトの名無しさん2011/02/04(金) 07:13:19
>>642
継承元のコンボボックスもカスタムコントロールなんです。
0644デフォルトの名無しさん2011/02/04(金) 07:33:47
ユーザコントロールは、元の機能にない機能を追加してる場合に使う
もしその継承元のコンボボックスが見た目程度しか変更してないのであれば
そんなコントロールを使うのはやめて
WPFのコンボボックスの見た目をテンプレートで変えるコードに書き直せばいい
時間が許せば。
0645デフォルトの名無しさん2011/02/04(金) 13:39:42
時間「絶対に許さない」
0646デフォルトの名無しさん2011/02/04(金) 20:48:11
万一、コントロールのバグが発覚した時の対策なんかに
取り敢えず継承だけして、機能を一切追加せずに使うとかは?
0647デフォルトの名無しさん2011/02/04(金) 20:50:55
意味なし
最近は.NETでもJavaでも他のでも「継承は悪」が基本
0648デフォルトの名無しさん2011/02/04(金) 21:24:59
寝言はWPFの継承ツリーを見直してから言え
0649デフォルトの名無しさん2011/02/04(金) 21:36:03
インターフェース主流なのは解るが
全派生先で同じ実装するくらいなら、素直に継承すべき
0650デフォルトの名無しさん2011/02/05(土) 10:15:48
最近のWPFでの機能追加は、継承よりもビヘイビアが主流なんですがね。
0651デフォルトの名無しさん2011/02/05(土) 10:17:59
アプリケーションレベルではな
クラスライブラリとしてコントロールを提供する場合はそんなもん使わない
0652デフォルトの名無しさん2011/02/05(土) 10:32:41
結局好きなように作ればいいの?
0653デフォルトの名無しさん2011/02/05(土) 10:36:45
仕事でなければそんなん当たり前
0654デフォルトの名無しさん2011/02/05(土) 10:39:30
>継承は悪
これは多重継承できちゃう言語が戦犯なだけじゃないの?
0655デフォルトの名無しさん2011/02/05(土) 10:44:22
継承元の仕様が変わったらどうすんの?って話
仕様変わるならsealしとけカスって思うけどね
0656デフォルトの名無しさん2011/02/05(土) 11:03:39
DependencyObject継承するのが大前提のビヘイビアを例に出すのは可笑しい
0657デフォルトの名無しさん2011/02/05(土) 11:14:37
AがBを継承していて、CがBを使っているとすると、CはAとBの両方に依存することになるけど、
BがAを継承せずに内部で使っているだけなら、CはBにしか依存しないわけだ
だからAの仕様が変わってもBだけ変更すれば済む
0658デフォルトの名無しさん2011/02/05(土) 11:21:50
でもBをAとして扱うのが要件だったらアウトだね
0659デフォルトの名無しさん2011/02/05(土) 11:25:57
それは要件定義した奴に責任が行くから問題ないさ
0660デフォルトの名無しさん2011/02/05(土) 11:31:13
ControlにFooする機能を追加したFooControlと
Barする機能を追加したBarControlがあったとして
FooとBar両方が欲しくなったらどうするのか? という問題もあるな
0661デフォルトの名無しさん2011/02/05(土) 11:35:07
AbstractFooBarControlじゃないすか
0662デフォルトの名無しさん2011/02/05(土) 11:35:12
>>660
まーやり方はいろいろあるけど
FooControlもしくはBarControlのどちらかを継承したクラス(HogeControlを作って
継承しなかった方はHogeControlのコンストラクタでインスタンスを作って
アクセス用のメソッドを作るとか

HogeControlを外から見れば両方継承してるように見ればいいだけだし
0663デフォルトの名無しさん2011/02/05(土) 12:15:07
>>654
継承は悪、の根拠は結合密度の問題。
 is-a = 元クラスはホワイトボックス。元クラスの実装を変えたら影響を受ける。
 has-a = 所持クラスはブラックボックス。所持クラスの実装を変えても仕様が変わらなければおk

継承を使ってもちゃんと設計しハリウッドの原則に従えば疎結合にはできるし必ずしも悪ではないが、
protected変数を書き換え元クラスを制御ようなアホがいる限り"継承は悪"を言い広めるのが世のため人のため
0664デフォルトの名無しさん2011/02/05(土) 12:21:02
>>647は.NET一般の話なのに、>>650がビヘイビアの話にすり替えているのがおかしい

>>663
protected変数の書き換えが出来る時点でフレームワークがダメダメ
リフレクション前提ならそれもバカな話だ
0665デフォルトの名無しさん2011/02/05(土) 12:27:42
昔の思想やJavaの言語仕様に問題があっただけで、.NETじゃ継承もブラックボックスだよね
基本的に継承しても意味のないつくりになっていて、継承するのは継承専用に設計されたクラスだけ
0666デフォルトの名無しさん2011/02/05(土) 12:38:54
ヘルスバーグさまさまってとこか
0667デフォルトの名無しさん2011/02/05(土) 12:48:33
> protected変数を書き換え
というか派生クラスに書き換えてもらうためにprotectedにしてるんじゃないのか
0668デフォルトの名無しさん2011/02/05(土) 12:49:48
C#や.NETは基底クラスの変更によって派生クラスが誤動作しないように
やたらと細かい仕様があるからな
いかに基底クラスの変更を危険視してるかがわかる
約束事が通じる範囲なら勝手だけど、不特定多数向けのクラスライブラリ向けなら
protectedフィールドはpublicフィールドと何も違わない
0669デフォルトの名無しさん2011/02/05(土) 16:27:22
>664

つーか、ここWPFのスレなんだけど。
一般論展開したいなら余所のスレに行けばいい。

0670デフォルトの名無しさん2011/02/05(土) 16:30:01
>656
継承前提で使うクラスと、コントロールの継承とでは意味が違うんですが。
0671デフォルトの名無しさん2011/02/05(土) 16:33:09
>>669-670
両方とも俺じゃなくて>>647に言えよ
0672デフォルトの名無しさん2011/02/05(土) 16:35:24
実装の多重継承を許可しない設計の言語では、
継承によって小単位でカプセル化された特性やポリシーを
いくつも組み合わせて提供することができないから
「継承は悪」と思ってきたけど、そうじゃないの?
0673デフォルトの名無しさん2011/02/05(土) 18:30:07
>>663
>>ハリウッドの原則
もしよければ参考になる記事をおしえてくださ〜い。

>protected変数を書き換え元クラスを制御ようなアホがいる限り
継承したクラスが親クラスのprotectedで定義されている変数を直接いじるって解釈でOK?
0674デフォルトの名無しさん2011/02/05(土) 18:55:20
Don't call us, we'll call you.
たいして難しくないから「ハリウッドの原則」でググってみればおk。
多分大抵のプログラマが無意識にやっているはず。
> OK?
変数に限らず、親クラスの挙動を子クラスが制御すること自体マズい
0675デフォルトの名無しさん2011/02/05(土) 19:01:08
処理が分岐するならそれこそクラス分割しとけばいいような気がする
0676デフォルトの名無しさん2011/02/05(土) 19:18:59
>>674サンキュ
0677デフォルトの名無しさん2011/02/05(土) 19:44:36
>>663
protectedまでしかない言語じゃないんだし、
書き換えられたら困る場合はprivateにするんだよ。
違う言語の話が混じってないか?
0678デフォルトの名無しさん2011/02/05(土) 20:00:27
ところで>>641がどういう状況なのかよく分からんのだが
VSじゃなくてExpression Blendの話?
0679デフォルトの名無しさん2011/02/06(日) 09:16:03
>>678
VS(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:05
DCountを依存関係プロパティにする
0681デフォルトの名無しさん2011/02/06(日) 09:42:03
>>679
http://ideone.com/pbfk8
0682デフォルトの名無しさん2011/02/07(月) 12:08:16
ListBoxをDnDで並べ替えられるようにしたいんですが、MVVMな解法ってなんかあります?
EventTriggerで頑張るしかないのかな。
MVVM light使ってます。
0683デフォルトの名無しさん2011/02/07(月) 12:59:05
MVVMの枠でやることじゃないな。Viewの範疇。
ListBoxから継承するかコードビハインドかビヘイビアでコード書く。
ビューのコードからコレクションを並び替えるには、CollectionViewを使う。
0684デフォルトの名無しさん2011/02/07(月) 13:18:04
チェックボックスをクリックすると
もっさりしたアニメーションでチェックが入るんだけど
どうにかならないのでしょうか?
0685デフォルトの名無しさん2011/02/07(月) 13:48:21
Windowsとフレームワークのの限界超えては処理できません。
自作しちゃう?
0686デフォルトの名無しさん2011/02/07(月) 14:44:05
>>684
テンプレートを入れ替える
http://msdn.microsoft.com/ja-jp/library/ms752319.aspx
これにはアニメーションは含まれてないっぽいので単にコピペして使えばアニメーションしなくなるはず
0687デフォルトの名無しさん2011/02/07(月) 15:47:05
デフォルトのテンプレートってどこか(何か)でわかる?
0688デフォルトの名無しさん2011/02/07(月) 16:21:48
{Binding Value , StringFormat={}{0:F2}V}"
{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:42
>>687
Expression Blendには、デフォルトのテンプレートをコピーした上でそれをベースにして編集する機能がある
BlendないならコントロールのTemplateプロパティの値をXamlWriter.Save
0690デフォルトの名無しさん2011/02/08(火) 10:01:38
最近、WPFをやり始めたのだけど,どなたか教えてくだされ。

XBAPでボタンを配置してボタンを押すと他の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
http://msdn.microsoft.com/ja-jp/library/aa970060.aspx#communicating_with_the_host_web_page
によると、HTMLページのFrame内でXBAPをホストしている場合、
JavaScriptのwindowオブジェクトが取得できるらしいから
あとはJavaScriptでのページの移動と同じ方法が使えるはず。
でも正直XBAPなんか使わない方がいいよ。WPFなら普通のアプリとして作ってClickOnceで配布するか、
ブラウザで動かしたかったらWPFよりもSilverlightを強く推奨。
SilverlightならブラウザやHTMLページの操作も強力にサポートされてる。
0692デフォルトの名無しさん2011/02/08(火) 10:27:07
http://msdn.microsoft.com/ja-jp/library/ms591053%28v=VS.100%29.aspx

Private 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
>>691
ありがとうございます。Silverlightは触ったことすら無いので一度勉強してみます。

>>692
ぉお!まさにこれでした。・・・って試してみたらIE(XBAP)が終了した・・。
なるほど、そういうものなんですね。勉強になりました。

御返答頂いた方々、ありがとうございました。もっと功夫積んできます。
0694デフォルトの名無しさん2011/02/08(火) 20:37:39
BitmapFrameを使ってデジカメ画像のメタデータにアクセスして、exif情報は取れ
るのですが、ファイルがロックされてしまい、exif情報を取り出したファイルの操作
ができません。IDisposableでないので、Dispose()もできず、freeze()してみても変
わりません。どうしたら、ロックを解除できるでしょうか?
0695デフォルトの名無しさん2011/02/08(火) 20:40:04
Stream渡して作ればいいんじゃない?
0696デフォルトの名無しさん2011/02/08(火) 21:22:56
Windows API Code Pack for Microsoft .NET Framework 使えば、簡単にexif情報取得できるけどね
取れるのはOS依存だけど、そのOSのExplorerで読める物は大丈夫なはず

http://code.msdn.microsoft.com/WindowsAPICodePack
0697デフォルトの名無しさん2011/02/08(火) 23:10:38
>>695

Stream渡しでStreamをCloseするとファイルがロックされることはなくなりましたが、
こんどは BitmapFrame.MetadataがStreamのクローズと共にnullになってしまい
ました。MetadataをCloneしても、CloneCurrentValueしても変わりません。
Streamをクローズするまえに必要なタグ情報は全部読みだしておくことで回避していますが。。。

>>696
なんと! そんないいものがあったんですか? apicodepackは使っているんですが
知りませんでした。早速調べてみます。
0698デフォルトの名無しさん2011/02/08(火) 23:16:17
>>697
Streamだけのオーバーロードだと、遅延読み込みになるっぽい
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
>>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
■ このスレッドは過去ログ倉庫に格納されています