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

WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part16

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/05/30(木) 20:12:06.20
ユーザーインターフェースシステム、Windows Presentation Frameworkについて微に入り語るスレ。

Visual Studio 2012 & 2010
http://www.microsoft.com/visualstudio/jpn/downloads
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
Microsoft .NET Framework 4.5
http://msdn.microsoft.com/ja-jp/library/vstudio/5a4x27ek.aspx

前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part15
http://toro.2ch.net/test/read.cgi/tech/1359863558/

関連スレ
Microsoft Silverlight その9
http://toro.2ch.net/test/read.cgi/tech/1321150267/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
0710デフォルトの名無しさん2013/10/28(月) 16:27:37.16
脱線するとアレだからナントカパターンとするけど、そのナントカが
設計しながら製造やるようなとき、マッチしないんだよなぁ。
ありえねーとかはどうでもいい。事実としてそういうときは多い。
0711デフォルトの名無しさん2013/10/28(月) 16:31:18.72
理論は素晴らしいし納得できるが
実際それをやろうとするとアプリのロジック以上に悩まされる結果にw
あのパターンは娯楽だと思うよ
0712デフォルトの名無しさん2013/10/28(月) 17:03:09.41
>>709
うん、だからそれは単にノウハウが無いだけじゃないの?って言ってるの
パターンにハメて(フレームワーク使うというのはそういう事)、スニペット使を使う
そういう事をすれば大して効率は変わらないと感じているけどな
それにメリットを見いだせないという話とWPFは効率悪いはイコールとは思えない
0713デフォルトの名無しさん2013/10/28(月) 17:18:52.77
Formのポトペタでイベントにゴリゴリロジックのやり方でいいならWPFでも普通にかけるよね。
MVVMはユニットテストしたいなら必須だけどな。書きづらいところは素直にコードビハインド入れてなるべくVMに書くようにするぐらいのゆるい感じでやったらそんなにハマるとこもないと思うけど。
0714デフォルトの名無しさん2013/10/28(月) 17:40:14.24
>>713
うん、そう思う。WPFが効率悪いと思っている人はWinFormsみたいな書き方しちゃいけない
という固定観念が原因だろうね。WinFormsよりはコードとデザインが分離し易くなっている
って時点でWinFormsに戻る理由は俺には無いなぁ。
0715デフォルトの名無しさん2013/10/28(月) 17:44:24.23
でもListViewにDisplayIndexが無いのはどうかと思う
0716デフォルトの名無しさん2013/10/28(月) 18:30:22.62
javaはライブラリやツールなどいろんなものが充実してて最先端技術を知るには一番いい
.netは他の言語で流行ったものの型落ちの技術がやってくるところになってしまった
何故だ?
0717デフォルトの名無しさん2013/10/28(月) 21:04:24.27
ListBoxItemにいろいろつっこみたいから
もうWinFormsには戻れない
オーナードローなんてしたくない
0718デフォルトの名無しさん2013/10/28(月) 22:06:30.78
XAML系のUIはそういう柔軟性だけはいいね。
でもやっぱりWPFもXAMLも好きになれない。
0719デフォルトの名無しさん2013/10/28(月) 22:27:16.00
ドカタにわかるくらいにならないと流行らんな
0720デフォルトの名無しさん2013/10/28(月) 22:40:56.56
>>716
ろくにジェネリクスもラムだもないボンクラが何をほざいてるんだ?
0721デフォルトの名無しさん2013/10/28(月) 22:48:56.70
ラムだじゃなくてラムダだっちゃ
0722デフォルトの名無しさん2013/10/28(月) 23:04:10.67
最近はJavaの方がC#パクってる感がある
0723デフォルトの名無しさん2013/10/28(月) 23:42:32.68
インスパイヤしただけだろ。
0724デフォルトの名無しさん2013/10/28(月) 23:57:51.50
飲ま飲まイェイ!
0725デフォルトの名無しさん2013/10/29(火) 00:14:32.90
ダーリンゆるさないっちゃ
0726デフォルトの名無しさん2013/10/29(火) 00:19:12.56
メニューとコンテクストで同じ命令があった場合
コマンド機能ってらくだなーって思った

ListViewにデータぶちこもうとしたら
バインドやマークアップ拡張とかあんまり使ったことないのを学ばされて疲れた
ここらへんもうちょっとシンプルに書けるようにならないのかなー
0727デフォルトの名無しさん2013/10/29(火) 00:34:44.89
ObservalCollectionとか一瞬意味がわかりませんでした
0728デフォルトの名無しさん2013/10/29(火) 01:18:02.20
綴り違うしな
0729デフォルトの名無しさん2013/10/30(水) 22:23:33.57
Formsを簡単に変換できませんかね。できませんよね
0730デフォルトの名無しさん2013/10/30(水) 22:36:24.03
両方の知識があればコンバーターは結構簡単に作れる
0731デフォルトの名無しさん2013/10/30(水) 22:49:08.05
簡単に作れるのにコンバーターツールがないってことは簡単じゃないってことじゃないのか?
0732デフォルトの名無しさん2013/10/30(水) 23:30:27.56
コンバーターってDSL書くってことだろ?
いやー大変でしょw
0733デフォルトの名無しさん2013/10/31(木) 00:01:31.54
つうかまともに動くものとか無理ゲーでしょw
0734デフォルトの名無しさん2013/10/31(木) 21:13:36.55
だって同じ名前のコントロールでもメソッドとか名前変わってたり機能あったりなかったり
互換あるわけじゃないし無理ゲーだと思う。まぁ、あってもいらんけど。
0735デフォルトの名無しさん2013/10/31(木) 23:38:26.41
そもそもコードをxmlにコンバートする時点で
0736デフォルトの名無しさん2013/11/01(金) 00:06:36.03
Xamlを一切使わないでC#コードだけ書くっていうのならできそうじゃね?
0737デフォルトの名無しさん2013/11/01(金) 00:22:12.66
AndroidもiOSもそのやり方でやってるわ。
WPFもそれでいけるよね
0738デフォルトの名無しさん2013/11/01(金) 03:17:13.12
もともと大したコードを書いてないから変換も簡単にできる(キリッ
0739デフォルトの名無しさん2013/11/01(金) 07:58:28.88
まずForm側の情報取得はインスタンス化してプロパティを見るだけでいいんだよ
最初に出現するコントロールと設定されてるプロパティを列挙しておく
それから各コントロールのXElement変換処理を実装するだけ
WPF案件にFormsでデザイン送ってきたアホのソースをコンバートしたときは二時間ぐらいでXAMLが変換できた

コードビハインドは対象にしなかったけど、コード書き換えてコンパイラーを動かせば式木は取れるはず
Graphicsとか触ってる箇所は知らん
0740デフォルトの名無しさん2013/11/01(金) 09:34:27.96
どーも発想がテキストベースにしか行かなかったが、
ターゲットにするコントロールを絞れるなら、リフレクションでなんとかなりそうだな
0741デフォルトの名無しさん2013/11/01(金) 23:05:12.89
>>716

10年前の書き込みかと思った。

ただ、今は .net系のほうが進んでいるけど、でもそれはマイクロソフトが提供する部分で、
周辺ライブラリは javaのような盛り上がりはないだろうね。
0742デフォルトの名無しさん2013/11/01(金) 23:06:42.28
盛り上がってる?
なんか中途半端で使えないものが乱立してるだけのような気がする
0743デフォルトの名無しさん2013/11/02(土) 00:57:35.92
pythonやPHPで流行ったものもjavaまでは容易に移植されるけど
そこからc#には何故か壁があってなかなか来ない
VB?
なにそれ?
0744デフォルトの名無しさん2013/11/02(土) 01:01:12.51
Javaと比較してフレームワークは多いけどライブラリはほんと少ないよね
特に画像系は移植が途中までとかCをC++/CLIで自分でラッパー書けとかばっかw
0745デフォルトの名無しさん2013/11/02(土) 01:19:39.68
VS2010の時はデザイナに表示されるWindowsの右下にWindowを自動サイズにするボタンが
存在したと思うんだけど、これVS2012では廃止された?
0746デフォルトの名無しさん2013/11/02(土) 01:41:34.02
WPFのボタンって糞だな
文字が書いていない余白のところをクリックしても反応しない
0747デフォルトの名無しさん2013/11/02(土) 02:29:04.08
MONOはWPF対応予定ないって創始者が言ってたけど
状況変わったかねー
0748デフォルトの名無しさん2013/11/02(土) 06:35:04.84
> CをC++/CLIで自分でラッパー
あ〜あ。
この一言で無知が露呈しちゃったね。
0749デフォルトの名無しさん2013/11/02(土) 08:54:15.80
>>748
PInvokeがーとか言いたいの?浅知恵乙
0750デフォルトの名無しさん2013/11/02(土) 10:32:31.14
>>746
そんなばかな
0751デフォルトの名無しさん2013/11/02(土) 11:48:11.30
ネイティブのDLLをC++/CLIでラップするのは面倒だったな。
ピン留めとか勝手にやってくれるP/Invokeの方が楽だった。
0752デフォルトの名無しさん2013/11/02(土) 13:02:19.83
Boost.Pythonみたいなの作れよ
0753デフォルトの名無しさん2013/11/02(土) 13:06:26.26
swigあるだろ
0754デフォルトの名無しさん2013/11/02(土) 18:35:32.53
オープンソースのライブラリ関連は貧困だけどこればっかりはMSもどうにもできない
0755デフォルトの名無しさん2013/11/02(土) 22:01:40.32
コントロールのスタイルをいじっているんですがうまくできません
ComboBoxやListBoxでマウスオーバーのとき青いハイライトになります
なぜスタイルの設定が反映されないんでしょうか

<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource GrayColor}" />
</Trigger>
0756デフォルトの名無しさん2013/11/02(土) 22:16:11.73
>>755
問題の原因が分からないから質問してるくせに、なぜその3行だけを抜き出してコピペするんだ
馬鹿なのか。
0757デフォルトの名無しさん2013/11/02(土) 22:42:40.66
>>755
なぜって、お前が生きてるから。
0758デフォルトの名無しさん2013/11/02(土) 23:11:34.75
疲れているせいかこんなんで笑える
0759デフォルトの名無しさん2013/11/02(土) 23:38:38.63
>>755
その方法はComboBoxならControlTemplateがStoryBoardでBackgroundを上書きしてしまうので効果がな〜い
http://msdn.microsoft.com/ja-jp/library/ms752094%28v=vs.110%29.aspx

じゃあどうする
ControlTemplateを書くしかありまっせん
既存のテンプレートコピーしてMouseOverのVisualStateだけ変更すればよかよ
0760デフォルトの名無しさん2013/11/03(日) 00:00:52.36
>>759
ControlTemplateは一度試したんだけど(IsMouseOver部分だけ書いた)
コントロール自体が表示されなくなった
ControlTemplateを作ると枠とかドロップダウンボタンなど全部作らないとだめってことでいいんでしょうか?
ControlTemplateで一部だけ変更するには上記のコードまるごとコピーした上で
変更するしかないですか?

WPFはデザインが楽って聞いたけど色の変更だけでもこれだけしないといけないって大変ですね・・・
0761デフォルトの名無しさん2013/11/03(日) 00:18:19.32
WPFのデザイン楽とか大嘘だから
業務システムなんかで画面遷移が多い場合テンプレート組み合わせてWebっぽく作れるから効率いいってだけ
0762デフォルトの名無しさん2013/11/03(日) 00:55:56.09
>>760
楽というか自由度が高い。それ故前のだとにっちもさっちもいかなかったものができたりもするが、自由ゆえにめんどくさいとこも。
0763デフォルトの名無しさん2013/11/03(日) 01:20:17.21
嘘、大げさ、紛らわしい
0764デフォルトの名無しさん2013/11/03(日) 05:56:27.11
コードとデザインが分離してるから分業しやすいとかも半分嘘だよな。
XAML見る機会が多いから他人の書いたXAMLはジンマシンが出てくる
0765デフォルトの名無しさん2013/11/03(日) 08:46:58.81
>>764
フォームよりは明らかにしやすいだろ(´・ω・`)
0766デフォルトの名無しさん2013/11/03(日) 11:00:34.50
Bindingソースだけ共有してれば割と分業楽だけど
0767デフォルトの名無しさん2013/11/03(日) 11:37:55.57
WPFの直感的でないところは逆引きに頼ってる人にとっては天敵だな
体系立ててシステムを学習してないとそんな発想でてこないってのが多い
0768デフォルトの名無しさん2013/11/03(日) 11:47:48.89
スタイルとかコントロールテンプレートとか、あとマークアップ拡張とか
Help読めば理解できるけど、直感というか他での経験的にできそうなことが出来なかったりもするね
自前で作ったコントロールを使う場合はclr-namespaceを指定するとか、別のアセンブリだと指定の仕方がまたw
0769デフォルトの名無しさん2013/11/03(日) 14:19:55.31
XAMLはinclude出来ると良いなと思うことが結構ある。まぁ出来るようになると
何処に何があるのか訳の分からんことになるのは間違いないけど同じ事を
何度も書くのはスニペットとか駆使しても疲れるわ。先ずはXAMLはツールが
もっと進化しないとキツイけど自由度高すぎて作るのも大変だろうな。
0770デフォルトの名無しさん2013/11/03(日) 14:46:37.96
優れてるのかどうかは知らないけど楽に書けるほうがいいね
CSS3はアニメーションが楽に書ける

まあ使わないけどな
0771デフォルトの名無しさん2013/11/03(日) 15:37:34.70
>>764
蕁麻疹や反吐がでるXAMLはVBプログラマーがポトペタで作ったやつ。
アラインメントやマージンを知らないバカが作るとそうなる。
0772デフォルトの名無しさん2013/11/03(日) 15:57:42.29
VB関係ないと思うが...
0773デフォルトの名無しさん2013/11/03(日) 16:02:00.10
全部マージンで配置してあると、小数点以下がビミョーにバラバラだったりとかが…
デザイナで小数点以下を無くすとかできないのかね。
0774デフォルトの名無しさん2013/11/03(日) 16:22:23.17
そんなことよりはやくC++/CLIでWPFつかるようにしてくださいよ
0775デフォルトの名無しさん2013/11/03(日) 16:22:55.12
キチョーメンな性格だな
0776デフォルトの名無しさん2013/11/03(日) 16:28:27.10
キメラ言語w
0777デフォルトの名無しさん2013/11/03(日) 17:34:26.29
さすがにアラインメントやマージンが各XAML毎にバラバラな画面とか保守したくないな
0778デフォルトの名無しさん2013/11/03(日) 20:14:22.14
>>774
別にVMから先だけでえーやん
0779デフォルトの名無しさん2013/11/04(月) 19:55:09.10
マージンバラバラってGUIから配置してるとそうならん?手で書いてるとあり得んし
色々理解してからは完全に手書きだな。昔のHTMLみたいだけどw
各コンテナの特性理解するまではマジで糞だと思ったなぁ。
0780デフォルトの名無しさん2013/11/04(月) 21:47:53.84
何言ってるのかよくわからん

マージンなんかデザイナでどう配置しようが、プロパティグリッド(みたいなの)で
明示的に指定しない限りデフォルト値じゃないのか。
0781デフォルトの名無しさん2013/11/04(月) 21:53:46.14
そもそもデザインできない奴がコード云々いっても広まるわけないんだよな
WPFはもっとデザイナーに訴求しないと、Windowsでこんなに美しいUI実装できますよ!ってね
まぁそんなことよりさっさとフォントレンダリング改善しろよって話、8では改善してくると思ったがこれじゃ9でも怪しいな
何故WindowsのフォントにデフォでDrawString適用しないのか意味がわからない
DrawString使えばOS X並みに綺麗なフォントが描写できるのに・・・
0782デフォルトの名無しさん2013/11/04(月) 23:35:17.29
>>780
Gridにエレメント貼り付けたことないの?
0783デフォルトの名無しさん2013/11/04(月) 23:47:12.51
>>761
やっぱ楽ってことじゃん
0784デフォルトの名無しさん2013/11/05(火) 20:36:55.51
>>780
デフォルトがGridなのでそこに何か貼り付けたら全部マージンで位置調整されちゃって
偉い事になるんだが全く触った事ないんだろうね。最初そういうコードが吐かれている
のでWPFってそういう流儀で書くものだと思って頭抱えたわ。
0785デフォルトの名無しさん2013/11/05(火) 20:39:21.41
>>781
俺もそう思う。
なのでBlend Expression的なデザインに特化したツールがVSと別に配布されるべきだと
思うんだけど・・・VSに統合されて終了とか何考えてるんだよと。
0786デフォルトの名無しさん2013/11/05(火) 21:44:00.54
regionで畳んでるコード付近で自作スニペットの挿入やるとカーソル位置じゃない所に
追加された挙句一部のコードを巻き込んで上書きしやがるんだけどこれって
スニペットの書き方が悪いの?それともバグ?
0787デフォルトの名無しさん2013/11/05(火) 21:51:49.56
なんでWPFスレで聞くのか
0788デフォルトの名無しさん2013/11/06(水) 00:18:10.02
だめだ早くツール作りたいのにWPF難しすぎる
>>759
これずっと悩んでいるんだけどできない

ListBoxでフォーカスがある行を赤で下線で表示
ListBoxでマウスオーバーしたところをハイライト

たったこれだけをやりたいだけなんけど
デフォルトのはMouseOverもFocusedもないので、自分でVisualStateに追加したんだけど
クリックした途端にエラーが出る
そのエラーメッセージもFrameworkPresenter.dllでエラーってなるだけで
何がどうだめなのかわからない
ControlTemplete.TrigerでFocusedを設定してもやっぱり効果なし
ListBoxでよく使われているはずなのに情報が全然ない
Blendあれば楽勝なんだろうけどExpresだからついてないし
もうちょっとヒント教えてもらえませんか?
もしくはWPFで作られているフォーカスやマウスオーバーを使っているListBoxなどあったら教えて下さい

もしかしてExpress使っている人でWPFやっている人いないのかな
0789デフォルトの名無しさん2013/11/06(水) 00:28:14.36
普通にDataTemplate食わせるだけじゃないの?
0790デフォルトの名無しさん2013/11/06(水) 00:30:40.77
素直にコードビハインド書けば3分で終わるのに
ご覧くださいこれが本末転倒というものです
0791デフォルトの名無しさん2013/11/06(水) 00:32:01.53
>>789
ItemContainerStyleだろう
0792デフォルトの名無しさん2013/11/06(水) 00:33:06.56
これでWPF流行ってたらおかしいわ
コードビハインドで十分
0793デフォルトの名無しさん2013/11/06(水) 00:36:48.59
>>788
見事につられてる君に俺が解答を上げよう

<Grid>
<ListBox ItemsSource="{Binding}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>

これが正解

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = Directory.GetFiles("C:\\");
}
}

さあマウスオーバーしてみよう
0794デフォルトの名無しさん2013/11/06(水) 00:44:32.55
WPFって逆引きみたいのあるんだっけ?
一通り見たりしたけどWPFとストアでまた微妙に違ったり>>788みたいにやりたいことにたどり着けないことがある。
tipicalなものについて逆引きあるとたすかるんだが。
0795デフォルトの名無しさん2013/11/06(水) 00:47:48.23
英語の書籍しかない
0796デフォルトの名無しさん2013/11/06(水) 00:49:27.81
需要が無いものの書籍とか同人誌で出してるべきだし
0797デフォルトの名無しさん2013/11/06(水) 00:53:47.38
あるコントロールで使えても他のコントロールでは通用しないこともあるから
本を作りにくいと思う

ちゃんと網羅したらぶっとい本になる…
0798デフォルトの名無しさん2013/11/06(水) 00:54:42.01
なまじっか検索して出てくるから集積するだけだとウリにならんし
0799デフォルトの名無しさん2013/11/06(水) 00:55:23.12
慣れれば>>759のページとかでコントロールの構造見たりデフォテンプラ眺めれば
どこ弄ればいいか分かるようになってくるぜ
0800デフォルトの名無しさん2013/11/06(水) 01:12:34.39
>>793
うわーあっさりできた、なんなのー?
こんな短いコードでできるのに俺は一体何をやっていたの?
ListBoxデフォルトをコピーした長いコードのVisualStateをいろいろいじくりながら
(アニメーションさせたいわけじゃないのに・・・)と疑問に感じながら格闘してたのに
ぐぐってもBlendでやれってのばかりだし

>>793
スタイルだけをいじくったら赤の下線にしたり、選択しているものにも下線したりできますか?

>>790
コードビハインドでは書けないと思ってました(例がXamlばかりなので書き方もわからない)

基礎的な@ITやMSDNはひと通り読んだのになぁ。まったく理解できてなかった
とにかく教えてくれた方々、ありがとうございます
0801デフォルトの名無しさん2013/11/06(水) 01:35:26.20
>>795
英語の書籍でもいいんだけどねぇ
どれが良いやつなのか探すのがむずい。

>>799
確かにその辺でつかんでくのが早そうだね。めんどくさいが。

>>793
ストアだとトリガーないからどうなんだろ…
0802デフォルトの名無しさん2013/11/07(木) 00:52:43.34
WPFは、
「取り合えず触ってみて、行き当たりばったりでヘルプを読みながら作ってみる」
奴には向かないな (それでも出来る奴は出来るんだけど)

一から順序立てて段階的に学習してかないと、中々身に付かない
一度覚えちまえば、後はすげー楽なんだけど
0803デフォルトの名無しさん2013/11/07(木) 01:00:36.57
そうかあ?w

ロジックを理解しただけではどうにも分からない、ワークアラウンド的な知識が
結構要求されると思うんだけど。

もちろんそれはWindows Formでもあったことだけど、このあたりのすっきりしない感は
Windows Formに比べても酷くなってるとしか...
0804デフォルトの名無しさん2013/11/07(木) 13:42:32.50
Qt使おうぜ
0805デフォルトの名無しさん2013/11/07(木) 13:56:21.58
1から学べるところってあるの?もしくは書籍とか

コントロールのコマンド一覧、トリガープロパティ一覧、スタイルのプロパティ一覧ってどこで見れますか?

ビヘイビアって何?

できることとできないことがわからない

バインディングのバインディングのバインディングでわけがわからなくなる

インテリセンスがないから手探りで作れない

情報少ない

もう挫折しそうだ
0806デフォルトの名無しさん2013/11/07(木) 14:26:33.12
それなりの規模のアプリを完全なMVVMで1つ作ってみれば、いろいろ身につくはず。
安易にコードビハインドに逃げると身につかないかも。別にずっとMVVMで作れってんじゃなくて、
目標があった方が良いってことな。そこからどうするかは覚えてから考えればいい。
0807デフォルトの名無しさん2013/11/07(木) 14:41:04.09
>>804
Qtはもうオワコン
これからはWPFの時代
0808デフォルトの名無しさん2013/11/07(木) 15:02:54.36
MVVMでアクションゲームは作れますか?
0809デフォルトの名無しさん2013/11/07(木) 15:16:07.50
ゲームはwpfにはそもそも向かない。フレームワークの選択が間違ってる。
MVVMにもマッチしない
■ このスレッドは過去ログ倉庫に格納されています