トップページ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/
0683デフォルトの名無しさん2010/04/28(水) 01:48:52
blend上で動くなら何も心配しなくていいんじゃないの何かあるの?
0684デフォルトの名無しさん2010/04/28(水) 02:07:24
http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_02/uiframework_02_04.html
上のサイトの中央付近から始まる「コレクション・オブジェクトへのバインド」のところを
動かそうとしたのですが下記のようなエラーとなり動きません。

>エラー 1 値 ' {Binding}' をプロパティ 'ItemsSource' に割り当てることができません。
>型 'IEnumerable' のプロパティ 'ItemsSource' は文字列として指定できません。

どのように対処すればよいのでしょうか?
0685デフォルトの名無しさん2010/04/28(水) 02:14:01
>>682
.NET 4 と .NET 4.0 の違いを詳しく教えてください。
区別すべきなのでしょうか?
0686デフォルトの名無しさん2010/04/28(水) 02:15:10
.NET 4.0 とかくことは意味があると思いますが、
.NET 4 と指摘していることについて詳しく教えてください
0687デフォルトの名無しさん2010/04/28(水) 02:19:37
>>684
素直にXAMLで書けよ
06886842010/04/28(水) 02:28:18
自己解決しました。
ListBoxを使っているほかのサンプルと見比べたところ

<Grid x:Name="MainPanel" Loaded="MainPanel_Loaded">
<ListBox ItemsSource=" {Binding}"
DisplayMemberPath="Bmi"/>
</Grid>



<ListBox ItemsSource=" {Binding}"
{Binding}の前の半角スペースが原因で文字列として認識されていたようです。


>>687
質問に対する答えになってないと思いますが・・・
0689デフォルトの名無しさん2010/04/28(水) 02:37:07
VS2005 / .NET2.0 しか許されない環境で、
MVVMを模倣して手動でモデリングしたクラスプログラミングをすることは効率化になりますか?
0690デフォルトの名無しさん2010/04/28(水) 02:37:15
ガベージイン、ガベージアウト
0691デフォルトの名無しさん2010/04/28(水) 02:43:57
>>685-686
「.NET Framework 4」が正式名称。
.NET 4.0と言っても問題なく通じるので実用上の問題はない。わざわざ指摘する程の事でもないだろ>>682
06926892010/04/28(水) 03:17:09
>>74が気になるなぁ。リフレクション調べてみるか…
0693デフォルトの名無しさん2010/04/28(水) 03:21:53
>>692
目指す目標としてXAMLなどがあるんだし、それと同じ仕組みにすれば
MVVMも可能じゃないかな?

まあ自前であれこれするより本当はWPFにするべきなんだが

ところでなんでそんな古い環境にこだわらないといけないんだろうw
0694デフォルトの名無しさん2010/04/28(水) 05:26:27
VとVMの疎結合さえ保てればとりあえずMVVMって言えるのかな?
・Viewを定義する「なにか」を設計する
 (WPFではXAML)
・「なにか」からViewを生成するライブラリを実装する
 (WPFではSystem.Presentationとかかな?)
・「なにか」と実行時バインドする方法も実装する
 (依存プロパティみたいな仕組み。ここでリフレクションががっつり登場)

マンドクセ・・・
XAMLの仕様はそのまま使って.net 2.0 WinFormsでもViewが構築できるライブラリ作れば
それなりに需要は・・・ないか
0695デフォルトの名無しさん2010/04/28(水) 05:34:57
一番重要なのはMとVVMと間のデカップリングだと思うよ。
0696デフォルトの名無しさん2010/04/28(水) 05:37:58
そういえば依存関係を切り離せるコンテナってあったよね?
あれは使えないの?
0697デフォルトの名無しさん2010/04/28(水) 06:30:25
ざっくりいうとVMはVからのMに対するブリッジって認識だがよろし?

>693
ぶっちゃけマシン性能にもよるんだろうが未だにWPF遅くね?
頻繁な更新が必要なデイトレアプリみたいなもんとか向いてなさそうなんだが。

>694
そげんな感じのもん作ったお。未だに2000とかにも配慮しなきゃいけなくてな( ^ω^)・・・
0698デフォルトの名無しさん2010/04/28(水) 06:42:25
DIコンテナは未だによくわからん・・・
0699デフォルトの名無しさん2010/04/28(水) 07:39:00
>>693-697
thx.
2005なのは、そういう環境でWindowsXpとWindowsCEの開発レッスンを受けてますw
自分が2000使ってるのでその点も嬉しいかなw
0700デフォルトの名無しさん2010/04/28(水) 10:36:39
>>696
CAL(Prism)なんかはUnityのDIコンテナ使ってるよ。

.NET4で追加されたMEFもかな、仕組みはDIコンテナっぽいが。
0701デフォルトの名無しさん2010/04/28(水) 10:46:10
ブラウザアプリでエクセルを操作するプログラムが入っててエクセルオブジェクトバージョンが違ってる人がアドレス開いてアプリ操作したらどうなるの?
0702デフォルトの名無しさん2010/04/28(水) 10:52:10
WPFが描画にGPUとCPUどっちを使ってるかどうすればわかるんですか?
自分のグラボがWPFに対応出来てるかしりたいんです
0703デフォルトの名無しさん2010/04/28(水) 12:52:20
>>702
WPF のパフォーマンス プロファイリング ツール
http://msdn.microsoft.com/ja-jp/library/aa969767(VS.90).aspx
0704デフォルトの名無しさん2010/04/28(水) 13:55:32
依存関係の向きがV→VM→Mとなってればいいだけのことで
VのコードビハインドでVとVMを手で結びつければバインディングはいらないよ
コマンドはVMのメソッドを呼び出せばいいだけ
0705デフォルトの名無しさん2010/04/28(水) 14:11:36
MVVMの目的はVMを単体テストすることだよ
それが必要ないんだったらコードビハインドをVMとみなして
XAMLで自身のプロパティにバインドするだけでいい
それが本来WPFで想定されていたバインディングの使い方
0706デフォルトの名無しさん2010/04/28(水) 14:12:00
C++ と XAML の組み合わせで使えないのはなんで?
0707デフォルトの名無しさん2010/04/28(水) 14:22:27
WPFはマネージコード専用だから
C++/CLIで使えないのは単にMSにやる気がないから
WPFはアンマネージドな世界との相互運用がしづらいしものすごく高レベルなので
わざわざC++/CLIから使うというのはちょっと考えられない
0708デフォルトの名無しさん2010/04/28(水) 14:27:11
>>703
WindowsSDKツールのV6.0A V6.1の両方ともWpfPerf アプリケーションが入ってません
どのSDKですか?
0709デフォルトの名無しさん2010/04/28(水) 14:30:10
ブラウザアプリでファイルにアクセスできないと何も出来なくないですか
同一サーバー上のファイルにアクセスするにはどうすればいいんですか
0710デフォルトの名無しさん2010/04/28(水) 15:39:52
>>709
下手に許すとローカルのファイルをいじり放題。その気になればスパイウェアも仕込み放題ということになってしまうから、それはできないことになってる
0711デフォルトの名無しさん2010/04/28(水) 16:12:42
>635で質問したものだが、こういう風にすることでとりあえず解決した
http://ideone.com/OemER
0712デフォルトの名無しさん2010/04/28(水) 19:15:20
>>708
V6.0 か V7.0。
以前は単体でもダウンロードできたけど、今は出来ないみたい。
(http://windowsclient.net/wpf/perf/wpf-perf-tool.aspx ;の previous version of WpfPerf)。
SDK を入れるなら Win32 Development Tools だけ入れればいい。
0713デフォルトの名無しさん2010/04/28(水) 20:57:54
XAML:<ListBox ItemsSource="Binding ."/>
結果:
B
i
n
d
i
n
g

.

あぁそうか…stringもIEnumerableだったな…  ってこんなんアリなのかw
0714デフォルトの名無しさん2010/04/28(水) 23:35:19
ちょっとワロタw
0715デフォルトの名無しさん2010/04/29(木) 11:29:33
>>712
できたありがとう
ハードウェアレンダー 1 になってた
サンプルサイト見てるとカクカクだから絶対CPUレンダーだと思ったのに・・・
0716デフォルトの名無しさん2010/04/29(木) 17:32:32
Shazzam(WPF/Silverlight用のシェーダエディタ)良いね
シンプルだけどWPFやSilverlightのシェーダ書くのには十分
C#側のコードを自動生成してくれる
WPFの見本みたいなかっこいいインターフェイス
0717デフォルトの名無しさん2010/04/29(木) 19:15:45
WPF入門者用のサイトいくつか教えてくれ
0718デフォルトの名無しさん2010/04/29(木) 19:20:07
ゲームパッド使えるの?
0719デフォルトの名無しさん2010/04/29(木) 19:25:12
>>718
XNA+WPFでいけ
http://sorceryforce.com/xna/tips_xnaonwpf.html
0720デフォルトの名無しさん2010/04/29(木) 19:28:45
>>717
ここだなあ
http://www.atmarkit.co.jp/fdotnet/vblab/uiframework_01/uiframework_01_01.html

WinFormで動的にコントロール追加したりオーナードローとかやったことある人なら
それほど違和感なくやれると思うがこれからって人は2010のマウスでデザインできる
ってを利用した方がいいかもね〜
0721デフォルトの名無しさん2010/04/29(木) 22:40:11
XNAだとXBOX用コントローラしか使えない
DirectXは参照できたからそっちで攻めるしかないんじゃない
0722デフォルトの名無しさん2010/04/29(木) 22:50:42
>>721
PS2パッドも使えるわ
適当なこと言うな
0723デフォルトの名無しさん2010/04/29(木) 22:54:59
>>723
使えねえよ
07247232010/04/29(木) 22:57:13
>>722
つ、使えないと思います
0725デフォルトの名無しさん2010/04/29(木) 22:58:27
訂正来てよかったぜ
どう突っ込んでいいか悩んだぜ
0726デフォルトの名無しさん2010/04/29(木) 22:58:49
いやいや現に使ってるしw
なにいってんの?
0727デフォルトの名無しさん2010/04/29(木) 23:01:09
もしかしたら古いコンバーター使っているんじゃないのか?
1年前に買った奴だと普通に使えたわ
0728デフォルトの名無しさん2010/04/29(木) 23:40:58
>>726
そういうのもう良いから。

しかし DirectInput に未対応なのはなんでなんだろね。
0729デフォルトの名無しさん2010/04/29(木) 23:45:29
XNA+DirectXならXBOXコン以外使える
WPF+XNAならXBOXコンしか使えない
0730デフォルトの名無しさん2010/04/29(木) 23:48:59
>>720
全部読んでサンクス

読んで思ったのが
stackpanelに複数配置されたコンテンツを
そっくり別のコンテンツに取り替えるようなのって
xamlじゃ無理?
画像を表示してた場所をすべてボタンに変えるとか
そういうのはやっぱりC#でやるのかね

決まった雛形だら自由に作れるような感じだけど
GUIの表示をごっそり変えるのはどうするのかな

次はバインド読んでみるか
0731デフォルトの名無しさん2010/04/29(木) 23:50:28
ListBox.ScrollIntoView を使うと、指定したアイテムを画面内に持ってくることができますが、
一番端に表示されます。

これを一番端ではなく、もうちょっと内側(2、3個要素が見えるような位置)にしたいんですが、
どうすればよいでしょうか?
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っぽい表現は一発
ウィンドウのサイズに追従させるのはパっとはわからない
■ このスレッドは過去ログ倉庫に格納されています