WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2009/12/27(日) 10:58:30て語るスレ。.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 - June 2009 Release
ttp://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117
Visual Studio 2010
ttp://www.microsoft.com/japan/msdn/vstudio/2010/overview/
関連スレ
Microsoft Silverlight その4
ttp://pc12.2ch.net/test/read.cgi/tech/1244812356/
過去スレ
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1245384489/
WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
ttp://pc12.2ch.net/test/read.cgi/tech/1231506876/
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/
0382381
2010/03/12(金) 21:09:20window1 内に、Rectangle1, Rectangle2 を配置し、
線を太くし、それぞれに StylusDown, Up, Enter, Leave の関数を記述します。
各関数では、↑に貼ったURLのように StylusのIDで条件分岐し、
Rect1/2 どちらのイベントか、Down/Up/Enter/Leaveどのイベントか
が分かるように、文字列として出力するとします。
■試行1(Enter, Leaveのイベントを取らない場合)
・Rect1をタッチすると、"Rect1 Down 16" みたいに表示されます。
16はStylusDevice.IDの例です。
・Rect1上から指を離すと、"Rect1 Up 16" みたいに表示されます。
・Enter, Leave, Rect2の場合も同じです。
・Rect1をタッチしながらRect2をタッチすると、"Rect1 Down 16" に続いて
"Rect2 Down 17" みたいに表示されます。
続いて指を離すと、指に応じたIDが "Up" された表示が出ます。
■試行2(Enter, Leaveのイベントを取る場合)
・Rect1の外をタッチして、Rect1の中にスライドさせると、"Rect1 Enter 16"みたいに表示。
・そのままLeaveすると、"Rect1 Leave 16"みたいに表示。
・Rect1に Enter した状態で、Rect1, Rect2 の外をタッチすると、
"Rect1 Leave 16", "Rect1 Enter 16" "Rect1 Leave 16" "Rect1 Enter 16" ...
と、次々と表示されます。
・Rect1に Enter した状態で、Rect2をタッチすると、
"R1 Leave 16" "R1 Enter 16" "R2 Leave 17" "R2 Enter 17" "R1 Enter 16" "R1 Leave 16" "R2 Enter 17"...
と、次々と表示されます。
これが何故か分かる方、
また、この対処方法が分かる方はおりますでしょうか?
長文、申し訳ありませんがよろしくお願いします。
0383デフォルトの名無しさん
2010/03/12(金) 21:18:58間違っても「どうすればいいか」とかは聞かないでくれよ。
0384381
2010/03/12(金) 21:33:23早速のレスありがとうございます。
Down, Up は同一のポイントとして計算はされず
Enter, Leaveは同一として計算される
ことが分かる情報があるということでしょうか。
Down, Up と Enter, Leave に大きな違いがある
という情報にあたった経験がありません・・・。
よろしくお願いします。
0385デフォルトの名無しさん
2010/03/12(金) 21:43:57いいたいことがあるなら上司かMSにでも言え。俺に言うな。
0387デフォルトの名無しさん
2010/03/15(月) 15:26:35treeview.SelectedItem = item;
のように指定できません。
例えばディレクトリ構成をツリー表示している場合、初期ディレクトリを開いて
選択状態にしたい時はどのようにしたらいいでしょうか?
0388デフォルトの名無しさん
2010/03/15(月) 17:18:43つEnsureVisible()
0389デフォルトの名無しさん
2010/03/15(月) 17:33:120390デフォルトの名無しさん
2010/03/19(金) 01:16:40Model-View WPF Applications--Part 2, Walkthroughにおいて
コマンド呼び出しにわざわざCommandReferenceを間にかませているのだけど
これは何の意味があるのでしょうか?
ViewModelのプロパティ名を記述する部分を一箇所にまとめるという意味はあると思いますが。。。
そもそもCommandReference自体が何をするためのもの?
0391390
2010/03/20(土) 01:06:56となってるところを
<KeyBinding Key="X" Modifiers="Control" Command="{Binding ExitCommand}" />
こうしちゃえばいいじゃんと思ったら依存関係プロパティじゃないからバインドできないということなのね〜
StaticResourceでワンクッション置けばできる仕組みはなんとなくしか理解してないが
バインドできない(Dependencyでない)プロパティ用の中継オブジェクトという認識で理解。
0392デフォルトの名無しさん
2010/03/20(土) 20:34:28http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=52A193D1-D14F-4335-AA86-C53193E1885D
読んでないけど、なんか来てた。
0393デフォルトの名無しさん
2010/03/20(土) 20:49:32どうしたらいいでしょうか?
0394デフォルトの名無しさん
2010/03/20(土) 20:53:250395デフォルトの名無しさん
2010/03/20(土) 21:03:10[STAThread]
static void Main(string[] args) {
Application application = new Application();
application.StartupUri = new Uri(new FileInfo(args[0]).FullName);
application.Run();
}
0396デフォルトの名無しさん
2010/03/21(日) 15:27:44Fonts.SystemFontFamilies で列挙できる FontFamily で等幅かプロポーショナルか
判断する方法ありますか?
0397デフォルトの名無しさん
2010/03/22(月) 00:41:43OnClosingとかOnLoadイベントにICommandをバインド?したいのですが
どう書けばいいのですか?
xamlに直接書けないのかな?
イベントハンドラ作ってxaml.csにコードで書くのかな?
できないことはないと思いますがぐぐっても情報が見つけられないです
0398397
2010/03/22(月) 23:32:43MVVMでのイベント処理は結構悩みどころなんですね。
添付プロパティをくっつけてイベントキックさせるというメンドクサイやりかたが見つかりました。
↓
ttp://blogs.wankuma.com/kazuki/archive/2009/05/05/172467.aspx
xaml的には美しいですけどね・・・
このままではあまりに使い勝手が悪いので汎用的になるように改造してみます。
てか絶対誰か既に作ってるだろ。。。趣味だからいいんだけれどね・・・
0399デフォルトの名無しさん
2010/03/23(火) 10:59:35個人的には落ちない部分は大人しくコードビハインド書いたらいいのにとは思うけど。
0400デフォルトの名無しさん
2010/03/23(火) 13:36:30var service = (IWorkspaceService)this.Services.GetService(typeof(IWorkspaceService));
service.OpenWorkspace(HogeWorkspaceViewModel);
みたいにしたらだいたいなんとかなるとおもう
0401デフォルトの名無しさん
2010/03/23(火) 14:42:36AttachedCommandBehaviorが使えるよ。
http://marlongrech.wordpress.com/2008/12/13/attachedcommandbehavior-v2-aka-acb/
0402デフォルトの名無しさん
2010/03/23(火) 16:22:41私なりに調べた結果、WPFの描画の際に論理座標で色を配置する仕様が原因であること、図形と画像については
RenderOptionsのパラメータで解決させることができる。
ですがテキストに関しては解決させる方法が見つからないでいます。
WPF4.0から対応するといった内容のページも見つけましたが、なんとか解決させたいと思っています。
どなたか解決方法を教授願えませんでしょうか。
0403397
2010/03/23(火) 17:04:58まぁ >>122 ということなのです。
WPF触りたてなのでまだまだMVVMの華麗なる疎結合に夢と希望をもっていますのでw
>>400
IWorkspaceService ってインターフェースはMSDNもグーグルさんも知らないとおっしゃってるのですが・・・
>>401
おお!すばらしいです。
ぱっとみ問題ありそうなのはEventArgsが利用できなさそうなくらいですかな。
大変参考になります。
こんな↓ページを見つけまして
ttp://blogs.microsoft.co.il/blogs/tomershamam/archive/2009/04/14/wpf-commands-everywhere.aspx
でも上のはRoutedEventにしか対応してないから普通のEventHandler対応版を追加するのに
リフレクション使ってイベント名からイベント追加してというコードを作ったのですが
同じコードがあるじゃないか・・・orz
0404デフォルトの名無しさん
2010/03/23(火) 17:29:16WinFormsHost
敗北宣言に等しいけど
0405デフォルトの名無しさん
2010/03/23(火) 17:38:100406デフォルトの名無しさん
2010/03/23(火) 17:48:50XAMLくらい出せるだろ
0407デフォルトの名無しさん
2010/03/23(火) 22:35:36だからどうしたらいいと言えるわけではないけれど。
0408デフォルトの名無しさん
2010/03/23(火) 22:51:45を使っているのだが、
Win32におけるWM_GESTUREみたいなもので
Gestureイベントってあるのかな?
zoomとかrotateとか簡単に取得できると
良いのだが。
0409デフォルトの名無しさん
2010/03/23(火) 22:59:34でググる
0410デフォルトの名無しさん
2010/03/23(火) 23:34:37それで解答が得られたのであれば
本気で教えて欲しい。
どうせ「WPF マルチタッチ」でググったことないんだろ?
0411410
2010/03/23(火) 23:38:39正直スマンかった。
最近、海外のサイトばかり回っていたのだが
日本のサイトでもWPF4.0について書かれているサイトが
少しずつ増えているんだな。
0412デフォルトの名無しさん
2010/03/24(水) 21:26:14XP用に開発するのは無謀?
0413デフォルトの名無しさん
2010/03/24(水) 22:33:26俺はもうXPはサポート外でやろうと思ってるくらいだ。
0414デフォルトの名無しさん
2010/03/24(水) 23:08:34XPだと表示が微妙なんでしょうか?
0415デフォルトの名無しさん
2010/03/24(水) 23:09:18Silverlight4ならブラウザ外実行の普通のデスクトップアプリケーションとして
CDなどで直接配布できるよ
0416デフォルトの名無しさん
2010/03/24(水) 23:17:52微妙っていうか重いってのが一番のネックかと。
今のところ、WPF でやってみました!!なんてのが売りになるぐらい流行ってないと思う。
少なくとも国内では。
0417デフォルトの名無しさん
2010/03/24(水) 23:28:38簡単にWPFのGUIに移行できる?
簡単に言うとform1だけwindows1にするだけで
作り変えられるのか?ってとこが疑問なんだけど
このGUIで非同期とか実現できるのかなー
0418デフォルトの名無しさん
2010/03/24(水) 23:31:12昔の素朴なイベントキューアーキテクチャって一目で理解できたもんな
それってある意味ではすごい
0419デフォルトの名無しさん
2010/03/24(水) 23:32:32ならない
細かいところで変わってるから
0420デフォルトの名無しさん
2010/03/24(水) 23:33:31> form1だけwindows1にするだけで作り変えられるのか?
一応WinFormとの相互運用性は確保されてるが、
Windowに直接System.Windows.Forms.Controlは乗せられないから多少手間が必要
しかしそれ以前にそもそもWPF使う意味皆無だろそんなもん
> このGUIで非同期とか実現できるのかなー
意味分からん
0421デフォルトの名無しさん
2010/03/24(水) 23:38:29重いんですか、残念
こういうの待ってたんだけどなぁ
Silverlightってwikipedia見る限りWPFと同じなのかな??は調べてやってみまする
0422デフォルトの名無しさん
2010/03/24(水) 23:39:54プラットフォームに依存しないんじゃないの?
0423デフォルトの名無しさん
2010/03/24(水) 23:40:550424デフォルトの名無しさん
2010/03/24(水) 23:41:04GUI周りの構造の問題じゃないの?
試してないけどもしかするとvistaのAero切ったらだめってのと同じかもね
0425デフォルトの名無しさん
2010/03/24(水) 23:42:410426デフォルトの名無しさん
2010/03/24(水) 23:43:42GPUと融合果たしてるけど、xpまでは2Dが基本なのでWPFだといろいろ
無駄がありそうってイメージ
0427デフォルトの名無しさん
2010/03/24(水) 23:59:150428デフォルトの名無しさん
2010/03/25(木) 04:20:54UIがめっちゃオサレですね
でも使い方が全然わからん
ほんとにデザイナさんこんなの使えるの???
0429デフォルトの名無しさん
2010/03/25(木) 06:40:200430デフォルトの名無しさん
2010/03/25(木) 10:53:570431デフォルトの名無しさん
2010/03/25(木) 13:04:21OSはあんまり関係ないよ
WPFは基本的にウィンドウ内で完結してるのでほんとにゲームと全く変わらない
0432デフォルトの名無しさん
2010/03/25(木) 17:46:110433デフォルトの名無しさん
2010/03/25(木) 17:59:00ウインドウの中身をdirectxで書いてるという点では関係ない
0434デフォルトの名無しさん
2010/03/25(木) 22:30:39なのでOSは思いっきり関係ある。
0435デフォルトの名無しさん
2010/03/25(木) 22:33:57単なるゲームだと何度言ったら
0436デフォルトの名無しさん
2010/03/25(木) 22:42:50XPでは透明ウィンドウがソフトウェア処理されていたこと
.NET3.5ではXPでも透明ウィンドウにGPUが効くようになった
0437デフォルトの名無しさん
2010/03/25(木) 22:49:273.5以降ターゲットで作ればVista以降と比べて遅いってことはなくなるのか。
0438デフォルトの名無しさん
2010/03/26(金) 00:13:160439デフォルトの名無しさん
2010/03/27(土) 01:22:15イラレで描いた絵をXAML形式で吐いて
WPFに配置することはできますが、
以下のことは可能でしょうか?
・座標 (a, b) を設定する
・ボタンを押す
・指定した座標に、イラレで描いた絵を配置する
たとえば、ある canvas に対する相対位置 (a, b) に
XAML形式のものを配置するということを、C#のコードで
実現することは出来るのでしょうか?
0440デフォルトの名無しさん
2010/03/27(土) 08:06:130441デフォルトの名無しさん
2010/03/27(土) 08:23:34*.cs からイラレxamlって生成できるの?
どうやんの?
0442デフォルトの名無しさん
2010/03/27(土) 08:27:29労力を無視すれば
どんなことであれ不可能ではないだろう
0443デフォルトの名無しさん
2010/03/27(土) 09:08:38http://www.mikeswanson.com/xamlexport/
0444デフォルトの名無しさん
2010/03/27(土) 09:24:27XamlReaderでXAMLを読み込んでXAMLのルート要素の型(IllustratorならたぶんCanvas)にキャスト
Canvas.SetLeftとCanvas.SetTopで位置を設定
配置されてるCanvasのChildrenに追加
0445デフォルトの名無しさん
2010/03/27(土) 15:17:300446デフォルトの名無しさん
2010/03/27(土) 19:26:24〜でできますかという言い方をすれば俺ならこうやってできるぜ
という人が必ず現れるので労力は無視できる。
0447デフォルトの名無しさん
2010/03/27(土) 19:37:45それが2ちゃんの正しい使い方
0448デフォルトの名無しさん
2010/03/27(土) 19:39:35「◯◯ってどうやるんでしょう?→△△で出来ますよ(嘘自演)→アホ、□□だ情弱」メソッドもあるでよ。
0449デフォルトの名無しさん
2010/03/27(土) 19:44:390450439
2010/03/27(土) 22:09:58ありがとうございます。
そのプラグインで生成したxamlを *.cs.xaml に記述するのではなく
*.cs の中から生成したいのです。
>>444
ありがとうございます。
今、外出中なので帰宅したらやってみます。
また、いただいた情報から更に調べてみます。
>>445
ありがとうございます。
検索の手がかりになるキーワードだけでも
教えていただけないでしょうか。
0451デフォルトの名無しさん
2010/03/28(日) 02:42:38検索キーワード聞かなきゃ検索できないとか冗談にもならないレベルだよ
0452デフォルトの名無しさん
2010/03/28(日) 09:35:000453デフォルトの名無しさん
2010/03/28(日) 10:41:34大漁でしたね
0454デフォルトの名無しさん
2010/03/28(日) 12:24:39簡単に言うと、自分が思いつくいちばん近いキーワードで検索してページを読んで
もっと近そうなキーワードを見つけていくんだよ。誰でもできるだろ? やれ。
0455439
2010/03/28(日) 14:13:30それなりに検索術はあると思っていますが
皆さんの反応を見る限り、そうではなかったようです。
>>454氏の書き込んでいることはもはや当然のことで、
かれこれ3週間MSDNやらcode projectやらブログやらを
探っていますが、解に到達できていません。
その上で質問に来ています。
が、経験上、この流れになったが最後、
これ以上の情報をこのスレで得ることは困難なため
大人しく身を引きます。ありがとうございました。
>>453
遊びではありません。
0456デフォルトの名無しさん
2010/03/28(日) 14:38:440457デフォルトの名無しさん
2010/03/28(日) 16:01:23技術的な他分野ってこんなもんだろ
0458デフォルトの名無しさん
2010/03/28(日) 16:06:43希望の機能ならライブラリにメソッドがちゃんと用意されてるよ。
遊びじゃないなら3週間給料泥棒だったね。
0459デフォルトの名無しさん
2010/03/28(日) 16:09:21width, height を Auto にして Stretch にすると
たとえば Name="canvas1"のCanvasに対して
int w = (int)(canvas1.Width);
としても w に変な値が入ってしまう。
// HeightとWidthはあくまで開発者がデザイン時に設定した値
ということは分かったのだが、
ではどうやって値を取得するのかが分からん。
canvas1.RenderSize.Width
canvas1.ActualWidth
とか調べても分からん。
windowサイズの拡縮に合わせて変化する canvas の
縦横を取得するにはどうすれば良いの?
# VC#2008, WPF3.5SP1
0460デフォルトの名無しさん
2010/03/28(日) 16:15:53「調べても分からん」?「確認したけど期待した値じゃない」じゃなくて?
0461デフォルトの名無しさん
2010/03/28(日) 16:17:370462459
2010/03/28(日) 16:20:36>「確認したけど期待した値じゃない」じゃなくて?
そうでした。すまん。
なんか 0 が返ってくる。
>>461
・・・ビンゴな気がする。
Invalidatなんたらを実行してからとか
そんなのですかね。色々試してみる。
お二方ありがとうノシ
0463デフォルトの名無しさん
2010/03/28(日) 16:35:230464459
2010/03/28(日) 16:42:19Window_Loaded() の中で呼んだら、期待した値が来ました。
本当にありがとうございました。
0465デフォルトの名無しさん
2010/03/28(日) 18:09:57いいってことよ
0466デフォルトの名無しさん
2010/03/28(日) 18:44:240467デフォルトの名無しさん
2010/03/28(日) 18:54:470468デフォルトの名無しさん
2010/03/28(日) 18:56:06普通そうです
0469デフォルトの名無しさん
2010/03/28(日) 18:57:590470デフォルトの名無しさん
2010/03/28(日) 19:02:41ここコミュ力試験に出るよ。
0471デフォルトの名無しさん
2010/03/28(日) 19:07:14でも初めてのことだとたまにエスパーして欲しいことはあるな
そういうときは答えをもらおうとせずもらえそうなところに愚痴っておくといい
たまーにヒントがもらえるから
0472デフォルトの名無しさん
2010/03/28(日) 19:26:58あと「回答すべきことを明確に伝えれる」「必要なことは書き余分なことは書かない」も重要。
「ネットはテレホーダイの時代以前から触っているので」とか
歯に詰まったクラッカーのカスほどの価値もないことを書いて
自分が調べたキーワードがどういうものかもかかない奴には当然冷たい。
0473デフォルトの名無しさん
2010/03/28(日) 20:01:39最初の一行が効いたな
0474デフォルトの名無しさん
2010/03/28(日) 20:03:03おまえはテレホマンの魂を侮辱した!
0475デフォルトの名無しさん
2010/03/28(日) 20:17:42ビギナー向けのXAML入門書読んだほうが早いような気もするが
0476デフォルトの名無しさん
2010/03/28(日) 20:34:18入門書で分かるレベルのことであっても
いつも通りの調べ方をしてしまったんだろな。
それ故にプライドも高い。
0477デフォルトの名無しさん
2010/03/28(日) 20:44:190478デフォルトの名無しさん
2010/03/28(日) 20:44:23発生するイベントってありますか?
現状では、以下の2通りの方法で何とか実現していますが
美しくありません。
1) DispathderTimer を使う
・ System.Windows.Forms を参照
・ timer で定期的に呼ばれる関数内で Cursor.Position.X, Y を取得し
予め取得しておいた、解像度の情報と X, Y を比較して判定
問題点:タイマーを設けることで常に関数が呼ばれることになる
2) 透明の Rectangle などを置いて、MouseEnter で判定
・そのままです。
問題点:問題と言うか、美しくないです。
もしあるようでしたら、ご教授願いたいです。
よろしくお願いします。
0479デフォルトの名無しさん
2010/03/28(日) 20:55:040480デフォルトの名無しさん
2010/03/28(日) 20:55:39http://www.atmarkit.co.jp/fdotnet/dotnettips/003screen/screen.html
を組み合わせてみては?
0481478
2010/03/28(日) 21:11:57美しくなくないですか。
例えば市場に出すアプリを組んでいるプロ?の方でも
こういった力技で解決するのでしょうか。
>>480
あぁーなるほど。MouseMoveですか。盲点でした。
座標比較が頻繁に行われることに違いはありませんが、
timerよりかは遥かに良い方法ですね。
以下、つぶやきです。
1)の方法でも、OSは定期的に MouseEnter しているのか
判定しているのでしょうかね。それなら1)も2)も処理量は
大差ないかもしれません。が、仮定の話なので無駄ですね。
■ このスレッドは過去ログ倉庫に格納されています