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

WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2009/12/27(日) 10:58:30
あたらしいユーザーインターフェースシステム、Windows Presentation Frameworkについ
て語るスレ。.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/
0732デフォルトの名無しさん2010/04/29(木) 23:50:34
>>729
ああ、そういうことか
0733デフォルトの名無しさん2010/04/29(木) 23:53:22
>>731
そういうかゆいところに手が届かないこと多すぎるよな
それの対処にやたら時間かかって先に進めないのが
すごくイラつくわ
コアの部分に全然時間かけれない
0734デフォルトの名無しさん2010/04/30(金) 00:05:49
2,3個上の要素を指定すればいいのでは・・・
0735デフォルトの名無しさん2010/04/30(金) 00:11:44
やってみたら例外がでた!→範囲内に丸めろよ…

やっと初心者がWPFをやる時代が到来胸が熱くなるな
0736デフォルトの名無しさん2010/04/30(金) 00:46:35
WPF みたいな一部でしか使えないものは危険。
0737デフォルトの名無しさん2010/04/30(金) 00:53:21
意味わからん
0738デフォルトの名無しさん2010/04/30(金) 02:00:54
>>718
>>729
このスレならどうせWindows専用ってことだろうから
joyGetPosをP/InvokeすればXBOXコントローラ以外も使える。
Windows 95から存在するAPIなので安心。
ttp://msdn.microsoft.com/ja-jp/library/cc410473.aspx
0739デフォルトの名無しさん2010/04/30(金) 10:12:31
WPF勉強しているんだけど
初心者にはあえてこちらの方がお勧めのような気がする
GUI部分とロジック部分を自然に分離して記述するから
ソースも見やすくなりそう
0740デフォルトの名無しさん2010/04/30(金) 13:01:04
実際に初心者に使わせたら大半をコードビハインドに記述、
ViewModelでViewを生成し、
ViewがViewModelのコントローラという素敵構造にしたんだが…
0741デフォルトの名無しさん2010/04/30(金) 13:18:34
>>720
これずーっと読んでいって
第 3回 “見た目”を決めるリソースとスタイル
で詰まった
むずぅ
0742デフォルトの名無しさん2010/04/30(金) 13:24:51
>>741
そう?
WinFormでもImageListなんてあるけどあれの汎用版みたいなもんでしょ
0743デフォルトの名無しさん2010/04/30(金) 13:26:15
おっと途中になった
スタイルはCSSと似てるし
0744デフォルトの名無しさん2010/04/30(金) 17:50:21
みんなExpression Blen使ってるの?
0745デフォルトの名無しさん2010/04/30(金) 21:31:35
>>744
これからWPF試してみたいのでExpression Blend 4が早くでないかなと思ってる。
VS10が出たし、もうすぐだと思ってたんだがアナウンスがないな…
0746デフォルトの名無しさん2010/04/30(金) 22:57:26
ブレンド無しで WPF ってwww
0747デフォルトの名無しさん2010/05/01(土) 02:07:09
Blendなんて飾りですよ
ControlTemplate生成にしかわからんのです
0748デフォルトの名無しさん2010/05/01(土) 05:48:20
別にボタンを星型にしたいとか思わないしなあ
0749デフォルトの名無しさん2010/05/01(土) 08:02:08
ボタンを星形にするだけがテンプレートじゃないだろ
WPFの胆はDataTemplateやItemTemplate
VSだけだと手書きしないといけない
0750デフォルトの名無しさん2010/05/01(土) 09:16:53
Blendなきゃだめなのか
WPF一気にやる気なくなったわ
0751デフォルトの名無しさん2010/05/01(土) 10:52:30
やる気も金もない人間は必要とされていないようだ。
0752デフォルトの名無しさん2010/05/01(土) 10:52:45
2010を使い.NET4でWPFを始めてみました
ググりながら試行錯誤してコマンドとコンテキストメニューを繋ごうとしています
キー操作だと正常に動作し、PlayPause_Executeが呼ばれるのですが、
コンテキストメニューは見出しやキーの表示は合っていますが、グレー表示のままで選択できません
何が悪いのでしょうか?

タイマで定期的にCommandManager.InvalidateRequerySuggested();してみても変わらないようですし
キーを押したときにはCheckCanExecuteCommandが呼ばれますが、それ以外では呼ばれないようです

public class Commands
{
public static RoutedUICommand PlayPause = new RoutedUICommand("再生/一時停止", "PlayPause", typeof(Commands),
new InputGestureCollection { new KeyGesture(Key.Space) });
}

XAMLで(はしょっています)
<Window xmlns:local="clr-namespace:hoge">
<StatusBar.ContextMenu>
<ContextMenu>
<MenuItem Command="{x:Static local:Commands.PlayPause}" IsEnabled="True" />
</ContextMenu>
</StatusBar.ContextMenu>

C#側コンストラクタで
CommandBindings.Add(new CommandBinding(Commands.PlayPause, PlayPause_Execute, CheckCanExecuteCommand));

private void CheckCanExecuteCommand(Object sender, CanExecuteRoutedEventArgs e) {
e.CanExecute = true;
}
0753デフォルトの名無しさん2010/05/01(土) 11:04:27
>>751
お前は一日中いろんなスレで煽るしかできない人間みたいだな
07547522010/05/01(土) 14:06:29
>>752
どうやらContextMenuの場合だけのようで、理由はまだよくわかりませんが
とりあえずコンストラクタの最後にFocus();を入れることで回避できることがわかりました。
0755デフォルトの名無しさん2010/05/01(土) 14:11:55
>>753
お前は一日中いろんなスレで煽られるしかできない人間みたいだな
0756デフォルトの名無しさん2010/05/01(土) 14:48:48
Blendなんて飾りですよ。漢は手書き。マジで、Blendは非プログラマ向けの
ツールだから、開発者はUIをちゃんと設計して手書きした方が覚えがいい。
0757デフォルトの名無しさん2010/05/01(土) 14:51:15
うむ確かに手書きで覚えないとここまで分離した作りになると
わからなくなるぞ

JavaScript書くやつだってhtmlやCSSは知ってるだろ?

C#とXAMLの関係ってそういうもんだよ
0758デフォルトの名無しさん2010/05/01(土) 14:59:42
非プログラマ向けとかまで言い切っちゃうのは逆にblendを過大評価しすぎ
手書きすることとUIを設計することは全然関係ないし
細かいアニメーションとかスタイル指定とかblendあったほうがいいに決まってんじゃん
0759デフォルトの名無しさん2010/05/01(土) 15:05:52
設計して、手書きしろと薦めただけだから関係なんて求められてもねぇ。
設計してBlendで作れるんなら別にそれでいいけど、細かいアニメも
スタイルも、設計さえしてあれば、手書きできるから、敢えてBlendじゃ
無いとできないものって無いでしょ。

感覚的に作りたいという意味でBlendはプログラマ的じゃないよ。
でも、非プログラマに使わせて使えるかというと、使えないんだけど。
下手にソースを汚されても困るし、やっぱBlendは要らないなぁ。
存在が非常に中途半端。
0760デフォルトの名無しさん2010/05/01(土) 15:09:09
ああそれだとまあ同じように感じてるのかな
現状のblendはプログラマがデザイン的な作業をすることをサポートするツールって感じる
で俺には有用
アニメ付けるのにプレイバックなしで手書きとかやってらんない
0761デフォルトの名無しさん2010/05/01(土) 15:48:50
ホームページビルダー使えたからって
プログラミングができるわけじゃない
0762デフォルトの名無しさん2010/05/01(土) 16:41:15
html・cssの手書きとかあんな糞つまらん作業したって別に自慢には
0763デフォルトの名無しさん2010/05/01(土) 17:57:43
>762
cssは手書きしてた頃しか知らない。誰でもできる技術になった頃には
辞めてたから。XAMLもアホでもできるようになる前には、辞めて別の
何かを始めるよ。

元々は、つまんないとかの話じゃなくて、プログラマなら、デザイナで
操作するだけじゃなくて、ソースで中身を覚えろって話なんだけどね。
0764デフォルトの名無しさん2010/05/01(土) 18:46:17
何こいつ気持ち悪い
0765デフォルトの名無しさん2010/05/01(土) 18:55:34
わろた
手書きしてる俺カッケー(キリッ
0766デフォルトの名無しさん2010/05/01(土) 18:58:13
>>763
アホでもできるようなコードしか書けないから
すぐに追い抜かれて嫌になるのですね
0767デフォルトの名無しさん2010/05/01(土) 19:00:47
並のレベルのプログラマならblendの出力なんかいざとなればいつでも読めるんだからどうでもいい話
0768デフォルトの名無しさん2010/05/01(土) 19:06:25
>767
あぁ、いかにもやったこと無いって感じのコメントだね。
できるけど、嫌んなるよ。
0769デフォルトの名無しさん2010/05/01(土) 19:24:15
>>767
やればできる、っていうのとは あんまり関わりたくない・・・
0770デフォルトの名無しさん2010/05/01(土) 19:24:57
どうだろね
まだ本質的にややこしいGUIは作ってないし
blendで弄って出てきたXAML見てなるほどとか言っちゃうことがあるレベルだからわからんけど
でもXAML一緒に表示して弄れるんだからあんま問題なくない?
0771デフォルトの名無しさん2010/05/01(土) 19:52:49
>770
仕様的に危ない点もあるけど、デザイナが他にいるとして、見た目は
他人が作るわけだ。大概のデザイナはソースが読めないから、
ソースにコメントを入れるとか、読みやすいソースを書くというセンスも
無く、Blendが生成したソースがそのまま送られてくる。

書き直そうと思っても、こういうソースになった意図(内部的な実装仕様)
を読み解かないと、書き直せない。けど、デザイナは内部実装の仕様なんて
存在自体を知らんよ。

一人でやるなら自分の頭の中だけで解決するから、好きにすりゃいいと思う。
0772デフォルトの名無しさん2010/05/01(土) 20:07:41
まあ俺はもともとblendがデザイナとの協働ツールとして優れてるとは全然思ってないからね
0773デフォルトの名無しさん2010/05/01(土) 20:24:49
言い訳するな
0774デフォルトの名無しさん2010/05/01(土) 20:50:34
言い訳ってw
>現状のblendはプログラマがデザイン的な作業をすることをサポートするツールって感じる
先にこう書いてるよ
0775デフォルトの名無しさん2010/05/01(土) 21:36:36
ListViewで6000行10列ぐらいのDataTableバインディングしてるんだけど、スクロールが遅い
コンテナのリサイクルと仮想モードは有効にしてて、遅延スクロールは最終手段ってことで保留してて、
現状でこれなんで、デザインどころじゃないんだが
兄さん達はどうやって最適化してる?
0776デフォルトの名無しさん2010/05/01(土) 22:05:12
>>775
表示しているところだけListViewに追加する
他はダミー
0777デフォルトの名無しさん2010/05/01(土) 22:10:14
バインドするアイテムを制限するしかない気がする。
0778デフォルトの名無しさん2010/05/01(土) 22:22:34
そういうの必要になったらなにを試すかなと考えたら
直結するんじゃなくてvisualBrush化して並べるとかかなと思った
スクロールは早そうじゃない?
0779デフォルトの名無しさん2010/05/01(土) 22:42:03
>>778
visualBrushが分からんので調べたらようはハリボテか!それ頂き!

適当にブラーかけて描画省略してもよさそうだ、
兄さん達ありがとう。試行錯誤してみるよ
0780デフォルトの名無しさん2010/05/01(土) 22:44:25
描画というより重いのはレイアウトだろ
0781デフォルトの名無しさん2010/05/02(日) 03:19:00
ボタンをひし形にして疑似3Dゲームのように並べるにはどうすればいいだろう?
理想としてはウインドウの大きさに合わせて縮尺が変わってくれるといいのだが・・・
07827812010/05/02(日) 03:40:35
イメージとしてはこんなのです
ttp://tsushima.2ch.at/s/news2ch61559.png
青のラインの上をめざしてて、下の方は避けた挙動です。
0783デフォルトの名無しさん2010/05/02(日) 04:38:03
SkewTransform弄れば擬似3Dっぽい表現は一発
ウィンドウのサイズに追従させるのはパっとはわからない
0784デフォルトの名無しさん2010/05/02(日) 04:57:30
一人で作る小規模アプリにWPFは効率悪すぎる
0785デフォルトの名無しさん2010/05/02(日) 05:12:47
>>783
自己レス
初期表示で傾斜つけたコンテナをウィンドウに収まるように配置しとけばリサイズには勝手に追従するなあ
uniformgridならうまく拡大してくれるような気がする
07867812010/05/02(日) 05:15:31
>>783>>785
朝早くありがとう
ボタン単体で傾斜つけてグリッドに埋め込んだりしてたけどどうもおさまり悪いので
ボタンを入れ込むグリッドそのものを回転しちゃえって方向で今調べてました・・・
Blend使った方が楽かなあ・・・・
こいつが出力するxamlで勉強した方が速そう・・・orz
0787デフォルトの名無しさん2010/05/02(日) 05:30:40
UniformGridでかっちりできるね
縦横比によっては見えなくなっちゃうけど
blendはそりゃあったほうがいいでしょ
なかったらこんなのめんどくさくて試す気もしないもん
0788デフォルトの名無しさん2010/05/02(日) 06:16:28
こういうことか

ttp://tsushima.2ch.at/s/news2ch61563.png

ひし形の場合って影は下と右どっちが普通なんだろう
0789デフォルトの名無しさん2010/05/02(日) 06:19:16
おっとボタン上のテキストは正面向いてないといけないのかなー
それだと一手間いるな・・・
0790デフォルトの名無しさん2010/05/02(日) 06:19:45
>>788
まさにそういうのです
まあ影はこの際いらないかなあ・・・
将来的にはスキンも考えてるので
0791デフォルトの名無しさん2010/05/02(日) 06:30:26
>>788
あれですかね
ボタンを回転させるよりボタンを星形にするようにベクターをいじって
ひし形のボタンを作った方がいいかもしれないですね

ただそういう場合ってヒットエリアって矩形なんだろかそれとも作った形そのままなんだろうか・・・
0792デフォルトの名無しさん2010/05/02(日) 06:56:29
ちなみに>>787で作ったのはこんなのね
ttp://tsushima.2ch.at/s/news2ch61565.png
簡単だけどかなり見劣りするな・・・
0793デフォルトの名無しさん2010/05/02(日) 07:25:32
>>792
なるほど・・・
こちらでもBlend入れてデザインしてみましたが難しいですねw
ttp://tsushima.2ch.at/s/news2ch61568.png

ボタンそのものの形は変わるのですがあたり判定が元のままw
0794デフォルトの名無しさん2010/05/02(日) 07:53:44
あら?傾斜(擬似3D)じゃなくて回転でいいわけ?
だったらこういうのも
ttp://tsushima.2ch.at/s/news2ch61570.png
簡単・・・プレゼンターだけをグリッドとは逆に回転させるスタイルを定義する
判定も問題なしなんだけどこれだとリサイズしたときにむちゃくちゃになっちゃうな
0795デフォルトの名無しさん2010/05/02(日) 07:59:31
>>794
まあ本当はウインドウサイズ固定などができれば楽なんですけど
なにせウインドウズアプリなのでどうしてもウインドウサイズの変更は
できて当たり前みたいなところがあるのがつらいんですよね・・・

まあこんな状況だからウインドウズ関連で指を使ったタッチパネルUIが
普及しないんでしょうけど

細かいタッチ制度を出せるマウスもしくはスタイラスのような
ポインティングデバイス向けUIは得意なんでしょうけどね・・・
0796デフォルトの名無しさん2010/05/02(日) 08:08:12
>>793
ちゃんとClipしていれば当たり判定は問題ないはず
フォーカスの破線は自分で描画(もしくは消す)

ついでに、>>788のXAML
ttp://pastebin.com/TngzgvvF
0797デフォルトの名無しさん2010/05/02(日) 08:37:34
>>796
ありがとうございます

うーん難しいw
0798デフォルトの名無しさん2010/05/02(日) 10:51:49
というか、ゲーム作るならこれぐらいボタン使わないで描画しろよって話だな
中学生でもできるぞ
0799デフォルトの名無しさん2010/05/02(日) 10:53:36
WPFの3Dはゲーム作成の為にある
0800デフォルトの名無しさん2010/05/02(日) 10:57:55
データの視覚化とかトランジション効果とかの為だろ
0801デフォルトの名無しさん2010/05/02(日) 10:59:10
>>798
こういうUIを採用してるアプリが思い当らなかったのでゲームを例題にしてますが
ゲームじゃないですよ
0802デフォルトの名無しさん2010/05/02(日) 10:59:52
>例題にしてますが
>ゲームじゃないですよ
例題にしてますが
作っているのはゲームじゃないですよ
0803デフォルトの名無しさん2010/05/02(日) 11:06:15
ttp://tsushima.2ch.at/s/news2ch61577.png
改造して影をつけてみたけど解像度あがると重い・・・

ttp://tsushima.2ch.at/s/news2ch61578.png
赤丸のあたりに別途ボタンをつけたりする方法がわからない・・orz
0804デフォルトの名無しさん2010/05/02(日) 11:32:16
Gridはレイヤーみたいな使い方もできるぞ
がんばれ
0805デフォルトの名無しさん2010/05/02(日) 11:42:44
道具に振り回されている感じだね
もっと頭使えよ
0806デフォルトの名無しさん2010/05/02(日) 12:03:17
gridの使い方もわからない男の人って…
0807デフォルトの名無しさん2010/05/02(日) 13:10:06
>>803
これが進化したらビューポイントが出来上がりそうだと思った。
0808デフォルトの名無しさん2010/05/02(日) 17:30:25
>>804
はい

>>805
まあ休みの暇つぶしに始めたのでいろいろわからないことだらけなんですよね・・・
0809デフォルトの名無しさん2010/05/02(日) 19:28:29
>>803
これ格闘ゲームのキャラクター選択画面みたいだな
0810デフォルトの名無しさん2010/05/02(日) 19:52:56
こんなしょぼいもん作って喜んでるって
レベル低いな
0811デフォルトの名無しさん2010/05/02(日) 20:04:58
俺のデザイン最強(キリ
こんなしょぼいもん作って喜んでるって
レベル低いな(キリ

どんなUI作ってるんだろう見てみたい
0812デフォルトの名無しさん2010/05/02(日) 20:06:23
言ったもん勝ちだし。
MVPの俺が言うんだから確か。
0813デフォルトの名無しさん2010/05/02(日) 20:11:33
そういえばWinFormのClientSizeに相当する動きってどうやればいいんだろう
0814デフォルトの名無しさん2010/05/02(日) 20:15:45
コントロールとDataSetとの接続の仕方が判らない・・・
データベースを介さないと出来ないのか?
08157812010/05/02(日) 20:21:27
>>810
新しいことへの挑戦中なのでこれもラフスケッチみたいな物ですよ
今後でるであろうタッチパネル搭載端末で使いやすいUIの研究ですから
ある程度決まった画面内やりとりするってのはゲームUIから学ぶことが
多いのでこれもその一つなんですよ

WPFの勉強も兼ねてですから
まあ偉い人にはわからないでしょうねw
08167812010/05/02(日) 20:31:16
勝手にコメントしないでください
08177812010/05/02(日) 21:12:26
じゃあ、俺が変わりに。

アノデスネ・・・。
0818デフォルトの名無しさん2010/05/02(日) 21:16:50
Fromの上にWPFのMediaElementを乗せた簡易メディアプレイヤーを
.NET4で完全WPFに書き換えたら重くなった
やってることはほとんど大差ないのに何故だ
0819デフォルトの名無しさん2010/05/02(日) 23:36:30
>>813
Window.ContentのWidthとかHeightじゃだめ?
0820デフォルトの名無しさん2010/05/02(日) 23:43:45
>>815
研究なら自分でやることだな
この程度のことを質問しているようじゃ
何も出来そうにないな
08217812010/05/03(月) 01:19:15
>>820
その人成りすましなんですって・・
ID欲しいよ・・・
0822デフォルトの名無しさん2010/05/03(月) 01:40:50
>>819
ありがとうございます。

別件で
動的にコントロールを追加したりする場合はやはりC#側で制御するしかないんですかね?
0823デフォルトの名無しさん2010/05/03(月) 03:13:09
動的の度合いがわからない
0824デフォルトの名無しさん2010/05/03(月) 08:03:33
技術制約無視して条件分けとか言い出すんだから「xamlにコード埋め込め」でいいと思うよ
08258182010/05/03(月) 10:07:19
>>818
動画の上にテキストを表示するためにOuterGlowBitmapEffectを使ってたけど
.NET4で削除された?のでDropShadowEffectに書き換えたがこれが重いらしい
ウインドウサイズをいじって動画と重ならないようにすると少しだけ軽くなり
非表示にしたりEffectを無効にするとぐんと軽くなる

ヘルプの.NET4の相違点のページかなんかで
描画方法が変わったとか何か書いてあった気がするけどページが見つからない
0826デフォルトの名無しさん2010/05/03(月) 10:27:06
BitmapEffectはパフォーマンスがクソだからというので
ピクセルシェーダでGPUを思いっきり使うようになったんだけど(.NET3.5〜)
ハードウェアが対応してないとか
0827デフォルトの名無しさん2010/05/03(月) 21:51:18
>>825
俺は、動画はないけど文字列をいっぱい表示してるけど縁取りでDropShadowEffectを使ってみたら重いな、OuterGlowBitmapEffectも重かったけどね
ボカシの処理を無くして縁取りの処理をもっと軽くできないものか・・・
0828デフォルトの名無しさん2010/05/04(火) 07:05:54
>>827
ぼかしを無くして影を落とすだけでも重かったので、妥協して半透明の背景をつけることにした
BitmapEffectが重いからって話だったはずなのにこっちの方が重くなるのが納得いかない
グラボは6800XTだからShader 2.0には対応してるはずだけど3.0が必要なのかな
0829デフォルトの名無しさん2010/05/04(火) 15:31:17
カスタムコントロールにResourceDictionaryを定義した
xamlファイルを結びつけるのはどうすればいい?
カスタムコントロールのコードからリソース内の表示用部品を利用したいのだけれど。
0830デフォルトの名無しさん2010/05/04(火) 17:01:51
>>829
xaml の読み込み
ResourceDictionary.MergedDictionaries
or
XamlReader.Load(file)

部品の取得
FrameworkElement.FindResource(key)
or
ResourceDictionary[key]
0831デフォルトの名無しさん2010/05/04(火) 18:34:43
>>829
これでも
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("pack://application:,,,/MyApp;component/Dictionary1.xaml", UriKind.Absolute);
string myValue = rd["MyValue"] as string;
■ このスレッドは過去ログ倉庫に格納されています