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/
0784デフォルトの名無しさん
2010/05/02(日) 04:57:300785デフォルトの名無しさん
2010/05/02(日) 05:12:47自己レス
初期表示で傾斜つけたコンテナをウィンドウに収まるように配置しとけばリサイズには勝手に追従するなあ
uniformgridならうまく拡大してくれるような気がする
0786781
2010/05/02(日) 05:15:31朝早くありがとう
ボタン単体で傾斜つけてグリッドに埋め込んだりしてたけどどうもおさまり悪いので
ボタンを入れ込むグリッドそのものを回転しちゃえって方向で今調べてました・・・
Blend使った方が楽かなあ・・・・
こいつが出力するxamlで勉強した方が速そう・・・orz
0787デフォルトの名無しさん
2010/05/02(日) 05:30:40縦横比によっては見えなくなっちゃうけど
blendはそりゃあったほうがいいでしょ
なかったらこんなのめんどくさくて試す気もしないもん
0788デフォルトの名無しさん
2010/05/02(日) 06:16:28ttp://tsushima.2ch.at/s/news2ch61563.png
ひし形の場合って影は下と右どっちが普通なんだろう
0789デフォルトの名無しさん
2010/05/02(日) 06:19:16それだと一手間いるな・・・
0790デフォルトの名無しさん
2010/05/02(日) 06:19:45まさにそういうのです
まあ影はこの際いらないかなあ・・・
将来的にはスキンも考えてるので
0791デフォルトの名無しさん
2010/05/02(日) 06:30:26あれですかね
ボタンを回転させるよりボタンを星形にするようにベクターをいじって
ひし形のボタンを作った方がいいかもしれないですね
ただそういう場合ってヒットエリアって矩形なんだろかそれとも作った形そのままなんだろうか・・・
0792デフォルトの名無しさん
2010/05/02(日) 06:56:29ttp://tsushima.2ch.at/s/news2ch61565.png
簡単だけどかなり見劣りするな・・・
0793デフォルトの名無しさん
2010/05/02(日) 07:25:32なるほど・・・
こちらでもBlend入れてデザインしてみましたが難しいですねw
ttp://tsushima.2ch.at/s/news2ch61568.png
ボタンそのものの形は変わるのですがあたり判定が元のままw
0794デフォルトの名無しさん
2010/05/02(日) 07:53:44だったらこういうのも
ttp://tsushima.2ch.at/s/news2ch61570.png
簡単・・・プレゼンターだけをグリッドとは逆に回転させるスタイルを定義する
判定も問題なしなんだけどこれだとリサイズしたときにむちゃくちゃになっちゃうな
0795デフォルトの名無しさん
2010/05/02(日) 07:59:31まあ本当はウインドウサイズ固定などができれば楽なんですけど
なにせウインドウズアプリなのでどうしてもウインドウサイズの変更は
できて当たり前みたいなところがあるのがつらいんですよね・・・
まあこんな状況だからウインドウズ関連で指を使ったタッチパネルUIが
普及しないんでしょうけど
細かいタッチ制度を出せるマウスもしくはスタイラスのような
ポインティングデバイス向けUIは得意なんでしょうけどね・・・
0796デフォルトの名無しさん
2010/05/02(日) 08:08:12ちゃんとClipしていれば当たり判定は問題ないはず
フォーカスの破線は自分で描画(もしくは消す)
ついでに、>>788のXAML
ttp://pastebin.com/TngzgvvF
0797デフォルトの名無しさん
2010/05/02(日) 08:37:34ありがとうございます
うーん難しいw
0798デフォルトの名無しさん
2010/05/02(日) 10:51:49中学生でもできるぞ
0799デフォルトの名無しさん
2010/05/02(日) 10:53:360800デフォルトの名無しさん
2010/05/02(日) 10:57:550801デフォルトの名無しさん
2010/05/02(日) 10:59:10こういうUIを採用してるアプリが思い当らなかったのでゲームを例題にしてますが
ゲームじゃないですよ
0802デフォルトの名無しさん
2010/05/02(日) 10:59:52>ゲームじゃないですよ
例題にしてますが
作っているのはゲームじゃないですよ
0803デフォルトの名無しさん
2010/05/02(日) 11:06:15改造して影をつけてみたけど解像度あがると重い・・・
ttp://tsushima.2ch.at/s/news2ch61578.png
赤丸のあたりに別途ボタンをつけたりする方法がわからない・・orz
0804デフォルトの名無しさん
2010/05/02(日) 11:32:16がんばれ
0805デフォルトの名無しさん
2010/05/02(日) 11:42:44もっと頭使えよ
0806デフォルトの名無しさん
2010/05/02(日) 12:03:170807デフォルトの名無しさん
2010/05/02(日) 13:10:06これが進化したらビューポイントが出来上がりそうだと思った。
0809デフォルトの名無しさん
2010/05/02(日) 19:28:29これ格闘ゲームのキャラクター選択画面みたいだな
0810デフォルトの名無しさん
2010/05/02(日) 19:52:56レベル低いな
0811デフォルトの名無しさん
2010/05/02(日) 20:04:58こんなしょぼいもん作って喜んでるって
レベル低いな(キリ
どんなUI作ってるんだろう見てみたい
0812デフォルトの名無しさん
2010/05/02(日) 20:06:23MVPの俺が言うんだから確か。
0813デフォルトの名無しさん
2010/05/02(日) 20:11:330814デフォルトの名無しさん
2010/05/02(日) 20:15:45データベースを介さないと出来ないのか?
0815781
2010/05/02(日) 20:21:27新しいことへの挑戦中なのでこれもラフスケッチみたいな物ですよ
今後でるであろうタッチパネル搭載端末で使いやすいUIの研究ですから
ある程度決まった画面内やりとりするってのはゲームUIから学ぶことが
多いのでこれもその一つなんですよ
WPFの勉強も兼ねてですから
まあ偉い人にはわからないでしょうねw
0816781
2010/05/02(日) 20:31:160817781
2010/05/02(日) 21:12:26アノデスネ・・・。
0818デフォルトの名無しさん
2010/05/02(日) 21:16:50.NET4で完全WPFに書き換えたら重くなった
やってることはほとんど大差ないのに何故だ
0819デフォルトの名無しさん
2010/05/02(日) 23:36:30Window.ContentのWidthとかHeightじゃだめ?
0820デフォルトの名無しさん
2010/05/02(日) 23:43:45研究なら自分でやることだな
この程度のことを質問しているようじゃ
何も出来そうにないな
0822デフォルトの名無しさん
2010/05/03(月) 01:40:50ありがとうございます。
別件で
動的にコントロールを追加したりする場合はやはりC#側で制御するしかないんですかね?
0823デフォルトの名無しさん
2010/05/03(月) 03:13:090824デフォルトの名無しさん
2010/05/03(月) 08:03:330825818
2010/05/03(月) 10:07:19動画の上にテキストを表示するためにOuterGlowBitmapEffectを使ってたけど
.NET4で削除された?のでDropShadowEffectに書き換えたがこれが重いらしい
ウインドウサイズをいじって動画と重ならないようにすると少しだけ軽くなり
非表示にしたりEffectを無効にするとぐんと軽くなる
ヘルプの.NET4の相違点のページかなんかで
描画方法が変わったとか何か書いてあった気がするけどページが見つからない
0826デフォルトの名無しさん
2010/05/03(月) 10:27:06ピクセルシェーダでGPUを思いっきり使うようになったんだけど(.NET3.5〜)
ハードウェアが対応してないとか
0827デフォルトの名無しさん
2010/05/03(月) 21:51:18俺は、動画はないけど文字列をいっぱい表示してるけど縁取りでDropShadowEffectを使ってみたら重いな、OuterGlowBitmapEffectも重かったけどね
ボカシの処理を無くして縁取りの処理をもっと軽くできないものか・・・
0828デフォルトの名無しさん
2010/05/04(火) 07:05:54ぼかしを無くして影を落とすだけでも重かったので、妥協して半透明の背景をつけることにした
BitmapEffectが重いからって話だったはずなのにこっちの方が重くなるのが納得いかない
グラボは6800XTだからShader 2.0には対応してるはずだけど3.0が必要なのかな
0829デフォルトの名無しさん
2010/05/04(火) 15:31:17xamlファイルを結びつけるのはどうすればいい?
カスタムコントロールのコードからリソース内の表示用部品を利用したいのだけれど。
0830デフォルトの名無しさん
2010/05/04(火) 17:01:51xaml の読み込み
ResourceDictionary.MergedDictionaries
or
XamlReader.Load(file)
部品の取得
FrameworkElement.FindResource(key)
or
ResourceDictionary[key]
0831デフォルトの名無しさん
2010/05/04(火) 18:34:43これでも
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("pack://application:,,,/MyApp;component/Dictionary1.xaml", UriKind.Absolute);
string myValue = rd["MyValue"] as string;
0832デフォルトの名無しさん
2010/05/04(火) 18:44:44さんくす!
使うリソースは1つだけなので
this.Resources.Source = new Uri("pack://application:,,,/testcontrol/test.xaml");
でいけた。this.Content = this.FindResource("button");てな感じで使えるね。
これでようやくコントロールの表示部分に取り掛かれるわ
0833デフォルトの名無しさん
2010/05/04(火) 19:03:400834デフォルトの名無しさん
2010/05/04(火) 19:28:070835デフォルトの名無しさん
2010/05/05(水) 00:38:09そのコンパネがWPFだったりするんだけどな
0836デフォルトの名無しさん
2010/05/05(水) 01:34:120837デフォルトの名無しさん
2010/05/05(水) 01:44:000838デフォルトの名無しさん
2010/05/05(水) 03:17:030839デフォルトの名無しさん
2010/05/05(水) 16:50:170840デフォルトの名無しさん
2010/05/06(木) 08:43:050841デフォルトの名無しさん
2010/05/06(木) 23:49:46その中に同じ大きさの Viewbox を3つ配置しています。
3つのViewboxの位置は同じで、重なって配置されます。
それぞれのViewboxにはGridを配置し、その中には
・透過色を指定したPNG画像と
・Rectangleを1つずつ配置しています。
3枚の画像は同じ大きさで、UniformToFill にしています。
Rectangleは、各画像の背景色の領域中に配置するようにしています。
また、Rectangleはクリックされると Fill が変わるようにしています。
このとき、一番階層が高い Viewbox 内のRectangleしかクリックに反応してくれません。
2番目、3番目のViewbox内のRectangleも反応させるにはどうしたら良いのでしょうか?
ソースを以下にUPしましたので、よろしくお願いいたします。
ttp://www.dotup.org/uploda/www.dotup.org866125.zip.html
pass: wpf
0842デフォルトの名無しさん
2010/05/07(金) 00:02:32単純に一番目にRect三つ配置すればいいんじゃねーの
0843デフォルトの名無しさん
2010/05/07(金) 00:05:50Grid.Row, Grid.Column を分けずに、一つのセル(?)でやってるから、最後の Viewbox がイベントとっちゃって、その兄弟にはイベントが伝播しない。
素直に Canvas 使うか、Grid.Row を3つに分けなさい。
0844841
2010/05/07(金) 00:12:10急いで書いたため、情報不十分でした。
各Viewboxは個別に移動、拡縮をしたいのです。
(それに応じでViewbox内のオブジェクトも、移動+拡縮させたいです)
ですので、一番目にRect3つ配置ではダメなのです。
>>843
ありがとうございます。
いただいた情報を元に考えて見ます。
0845デフォルトの名無しさん
2010/05/07(金) 00:36:07Grid を入れ子にすれば、Grid で MouseUp をとるように変更すればできたけど・・・
もう少しスマートな方法ないかね。Viewbox 使わなければ Background に Transparent 設定してイベント透過させられるのだけど。
<Grid MouseUp="rectangle_MouseUp">
<Viewbox />
<Grid MouseUp="rectangle_MouseUp">
<Viewbox />
<Grid MouseUp="rectangle_MouseUp">
<Viewbox />
</Grid>
</Grid>
</Grid>
-----------
private void rectangle_MouseUp(object sender, MouseButtonEventArgs e)
{
((((sender as Grid).Children[0] as Viewbox).Child as Grid).Children[1] as Rectangle).Fill = Brushes.Red;
}
0846845
2010/05/07(金) 00:40:27忘れてくれ。
0847デフォルトの名無しさん
2010/05/07(金) 00:43:11その後ろの画像にヒット判定させろ?
無理じゃね?
0848デフォルトの名無しさん
2010/05/07(金) 01:05:450849デフォルトの名無しさん
2010/05/07(金) 01:09:17読み流してた
つまり>>847なんだなごめん
0850デフォルトの名無しさん
2010/05/07(金) 01:10:43それだったら全面のやつがイベント受けたらほかの物にも伝えるとかそんなんでいいんじゃね?
それか画像を管理してるコンテナ、この場合はGridがクリックイベント拾うとか
0851841
2010/05/07(金) 01:12:58やはり透過処理していようとも、画像の領域から
イベントを透過させることは無理(難しい?)みたいですね。
>>847-848
一番の理想は、”見えているオブジェクトがイベントを拾う”です。
うpしたものを見ていただけているか分かりませんが、
例えば2番目のViewboxを仮に下方向にAnimationさせた場合、
2番目のViewboxに配置したRectangleは「黒色」の後ろに隠れます。
このとき、隠れたRectangleはクリックできないようにしたいです。
が、それはあくまでも理想であり、3つヒットでも出来るなら嬉しいです。
0852デフォルトの名無しさん
2010/05/07(金) 01:43:080853デフォルトの名無しさん
2010/05/07(金) 01:50:25こういうGUIまわりは作りにくいな
0854デフォルトの名無しさん
2010/05/07(金) 02:04:46TunnelってPreview〜のあれ?
重ねたImageに対してトンネルなんてできるのか?
0855デフォルトの名無しさん
2010/05/07(金) 21:31:34ViewBox内のImageに
IsHitTestVisible="False"
をいれたら下のRectangleも反応したよ
ただ、これだと隠れたRectangleをクリックさせない
というようなことはできないけど
0856デフォルトの名無しさん
2010/05/07(金) 22:00:450857デフォルトの名無しさん
2010/05/07(金) 23:09:280858デフォルトの名無しさん
2010/05/08(土) 05:54:20ウィンドウのリサイズを行うと、WPF3だと勝手に連動してコントロールのサイズが変わるのに、WPF4だとウィンドウだけしかリサイズされない…。
結果、プロパティやXAMLをちょこっと変更しなければいけないのだけれど。
0859デフォルトの名無しさん
2010/05/08(土) 06:52:09http://code.msdn.microsoft.com/WPFShell/Release/ProjectReleases.aspx?ReleaseId=4332
0860デフォルトの名無しさん
2010/05/08(土) 10:34:01コントロールの上下左右に小さな円があるだろ
それクリックするとコンテナの端からの距離が固定される(WinFormsのAnchor相当)
0861デフォルトの名無しさん
2010/05/08(土) 11:12:39VS2010がフォームと同じフォント表示になったのに、
自分で作ったWPFアプリケーションのフォントレンダリングが前のままです。
0862デフォルトの名無しさん
2010/05/08(土) 11:59:323のソースを4でコンパイルするだけじゃ駄目。
TextOptions.TextFormattingMode
TextOptions.TextRenderingMode
0863デフォルトの名無しさん
2010/05/08(土) 13:08:490864デフォルトの名無しさん
2010/05/08(土) 22:23:02クリックですか。
クリックしたところ、希望の動作になりました。
ありがとうございました。
0865デフォルトの名無しさん
2010/05/10(月) 21:59:51それをバインドしているTextBlockでは、後ろに"%"を付けたいときって
どうすればいい?
0866デフォルトの名無しさん
2010/05/10(月) 22:01:19するまでもないな、StringFormat
0867デフォルトの名無しさん
2010/05/10(月) 22:17:23{Binding Path=Percent, StringFormat=0\\%}
これでいいのか?
マークアップ拡張内は書式指定文字列が訳分からんことになるな
0868デフォルトの名無しさん
2010/05/12(水) 17:42:43おおーまさしくこれだ。
なんで円記号が2つも…って思ったけどマークアップ拡張内では円記号もエスケープ必須か
0869デフォルトの名無しさん
2010/05/12(水) 17:45:000870デフォルトの名無しさん
2010/05/12(水) 18:13:55WPFはまだ情報量少ないみたいだし
0871デフォルトの名無しさん
2010/05/12(水) 18:18:10最終的に何を作るかでも変わるけど似てるようでかなり違うからなあ
下手にFormの方を覚えるとWPFだと戸惑うこともあるよ
0872デフォルトの名無しさん
2010/05/12(水) 18:21:510873デフォルトの名無しさん
2010/05/12(水) 19:48:05最初からWPFって、どうやって学習した?
後学のために教えて欲しい。
0874デフォルトの名無しさん
2010/05/12(水) 19:53:59ネットで情報収集。殆どはMSDNから。
書籍はエッセンシャルWPFだけ買った。
質問はここやC#スレで。
まだ全体は勉強してないけどな。目的のアプリ作るには一部だけでも十分。
C#と.NET Frameworkも同時にだったからだいぶかかったが。
0875デフォルトの名無しさん
2010/05/12(水) 19:54:500876デフォルトの名無しさん
2010/05/12(水) 20:02:060877デフォルトの名無しさん
2010/05/12(水) 20:03:39そんなことはないんじゃないの?
WPF側で名前つけておけばFormでやてったようなことはできるし
そういうのがだめってのならWPFなりの書き方すればいいだけだし
0878デフォルトの名無しさん
2010/05/12(水) 20:24:03.NET FrameworkっていうとC#とかのライブラリみたいなものだよね?
C#学習するのと.NET学習するのって違うの?
初心者なんで見当違いなこといってたらすまん
0879デフォルトの名無しさん
2010/05/12(水) 20:28:17.NET Framework上で動く中間コードを作るための言語が
C#やVB.netだよ
0880デフォルトの名無しさん
2010/05/12(水) 20:53:46英文法と英会話
0881デフォルトの名無しさん
2010/05/12(水) 23:18:460882878
2010/05/12(水) 23:24:39少しは理解が深まった、サンクス
0883デフォルトの名無しさん
2010/05/12(水) 23:39:31ありがとう。やっぱりネットか。
早く最新状態に即した書籍が出てくれないかなと思うんだが、欲しい情報は
ネットを探しまくるしかないんだな。
■ このスレッドは過去ログ倉庫に格納されています