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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2010/08/22(日) 21:11:53
一向に普及しないユーザーインターフェースシステム
Windows Presentation Frameworkについて語るスレ。
パワフルで柔軟すぎるのが敗因か? 正直ついていけないよね…。

Visual Studio 2010
ttp://www.microsoft.com/japan/msdn/vstudio/
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 Silverlight その6
ttp://pc12.2ch.net/test/read.cgi/tech/1271580489/

過去スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part6
http://hibari.2ch.net/test/read.cgi/tech/1274423236/
WPF(XAML, XBAP, .Net3.5)GUIプログラミング Part5
http://pc12.2ch.net/test/read.cgi/tech/1261879110/
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/

コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
0701デフォルトの名無しさん2010/11/22(月) 04:38:26
>あと、最近の環境はプログラムのエントリーポイントが判りづらいのが多い…

関数型言語のことですねわかります
0702デフォルトの名無しさん2010/11/22(月) 16:20:55
Rubyとかなんであんなに初心者向けの本が出てるのかわからん
実装剥き出しのオブジェクト指向でどう考えても初心者向きじゃないし
多くの初心者がプログラムと聞いてイメージするGUIアプリ開発には使い物にならんのに
0703デフォルトの名無しさん2010/11/22(月) 17:03:30
本出すと売れるからだろうな
0704デフォルトの名無しさん2010/11/22(月) 17:15:19
XAMLのほうで、テキストを結合する方法を教えて?

person.name="仙石";
のとき

<Button.Content="私は"+person.name+"です"。/>

私は仙石です
person.nameが"管"に変わった瞬間
私は管です
って表示されるみたいなことやりたいんだけど。
0705デフォルトの名無しさん2010/11/22(月) 17:38:47
StringFormat ※.NET3.5 SP1〜
以前はちょっとした変換にもコンバーターが必要になって面倒だった。
MultiBindingと組み合わせれば姓・名が別々になっててもXAMLだけで結合できる。
0706デフォルトの名無しさん2010/11/22(月) 17:41:40
<Button.Content="{Binding Path=name, StringFormat=私は{0}です。}"/>
0707デフォルトの名無しさん2010/11/22(月) 17:54:55
すげー

そういうTipsみたいなのってどこに書いてるの?
WIndows Formだとテクニック集みたいなページがいっぱいあるけど
WPFは小技/裏技みたいなページがないから困る・・・
0708デフォルトの名無しさん2010/11/22(月) 19:43:34
VSでバインディング書いてたらインテリセンスにStringFormatを見つける→何これ?→MSDN

あちこちのブログでも取り上げてあるから、検索してたらその内たどり着くんじゃないか。
0709デフォルトの名無しさん2010/11/22(月) 19:58:08
WPFのTips集って作りづらいかもしれない。
何やるにしてもBindingやナンチャラTemplateでお好きにどうぞという話になるので、
結局その辺から勉強することになる。
0710デフォルトの名無しさん2010/11/22(月) 20:14:20
そうかー
テンプレートを利用すれば
なんかキモイもの作れるね

ボタンにTextBlockをテンプレートに組み込んで
テキストボックスのようなボタンを作ったり。
0711デフォルトの名無しさん2010/11/22(月) 21:07:14
>>697
wpfは個人がちくちく作るツール向けの開発者ツールなんかじゃないし。
winformの時代もonpaintをオーバーライドしてなんかするなんて滅多に無かっただろ?
wpfの胆は見た目周りは実はどうでも良くて、MVCをきちんと分けるためのインフ
ラが揃ってることだと思うんだけどなあ。
0712デフォルトの名無しさん2010/11/22(月) 21:21:48
そこまでは素人だよ
玄人になると見た目周りにこだわりを持つようになる
0713デフォルトの名無しさん2010/11/22(月) 21:24:19
本当のプロは拘りなんてないよ。
要求されたことを完璧にこなすだけ。
0714デフォルトの名無しさん2010/11/22(月) 21:42:19
WPFはレイアウトに関するプロパティや機能が多すぎワロタ
0715デフォルトの名無しさん2010/11/22(月) 23:00:25
Microsoftは見た目にこだわるからね

office製品は昔はヘルプがイルカだった。
検索したい文字を入力してください
とかいう味気ないダイアログボックスを出すよりイルカのほうがよかったんだろう。
office 2007からも
今までのメニューバー
(ファイル 編集 表示とかいう文字ベースのやつ)を完全に撤廃し、
今までのやり方や操作性を犠牲にしてまでリボンとかいうグラフィカルな項目にした。

Microsoftにとっては見た目が非常に大事なんだろう。
0716デフォルトの名無しさん2010/11/22(月) 23:25:53
見た目は重要だからね
0717デフォルトの名無しさん2010/11/22(月) 23:38:14
リア充クラスはイケメンクラスを継承した。
俺はイケメンクラスを継承してないのでリア充になれなかった。

俺も顔のテンプレートを修正したい。
0718デフォルトの名無しさん2010/11/22(月) 23:40:40
イケメンクラスを包含すればいいじゃない。


お前の心の中にな!
0719デフォルトの名無しさん2010/11/22(月) 23:41:29
データバインディングわかんねぇえええええええええ

dataContextとかいうオブジェクト型の特殊な変数があって
そこになんか代入すればいいんだな!?

じゃあバインディングしたいデータがいっぱいあったらどうするんだ!?
dataContextはひとつしかないぞ!

なんか方法あるらしいが、わかんねええええええええええ
0720デフォルトの名無しさん2010/11/22(月) 23:50:50
Resultが1個しかなかったらSQLでテーブル1個にしかアクセスできないか?
結合があるんだそんなわけあるめえ
0721デフォルトの名無しさん2010/11/22(月) 23:53:04
バインディングしたいデータを詰め込んだクラス(ViewModel)を作ってDataContextに突っ込めばいい。

>>715
UXを重視した結果
0722デフォルトの名無しさん2010/11/23(火) 00:35:34
>>721
殺意をMicrosoftやOffice自体ではなく、
それと無関係なイルカに向けるという高度なUX重視判断の結果だなw
0723デフォルトの名無しさん2010/11/23(火) 00:37:12
| 何について調べますか?
| ┌────────────┐
| | お前を消す方法       |
| |                   |
| └────────────┘
| [ オプション(O) ]   [ 検索(S) ]
|
`──────────┐ ┌───
           , '´l,  ..| ./
       , -─-'- 、i_  |/
    __, '´       ヽ、
   ',ー-- ●       ヽ、
    `"'ゝ、_          ',
      〈`'ー;==ヽ、〈ー- 、 !
       `ー´    ヽi`ヽ iノ
                ! /
              r'´、ヽ
              `´ヽノ
0724デフォルトの名無しさん2010/11/23(火) 00:51:01
>>717
おまいら、よくわかってるじゃん
0725デフォルトの名無しさん2010/11/23(火) 01:30:01
>>722
MS擁護派の俺でもイルカは邪魔だと思うわw
0726デフォルトの名無しさん2010/11/23(火) 01:37:31
WPFならofficeのイルカみたいなのも簡単に作れる♪
0727デフォルトの名無しさん2010/11/23(火) 01:50:32
XPまでだとリージョンつかわないとパフォーマンス落ちてたんだよな
Vistaからその辺気にしなくてよくなった
0728デフォルトの名無しさん2010/11/23(火) 02:09:24
XAMLが楽だと思ったのはコントロールが継承できるとこだな。依存プロパティっていうんだっけ?
メニューなど入れ子になってる場合、親メニューをいじるだけでいいから楽チンだわ
0729デフォルトの名無しさん2010/11/23(火) 02:12:01
>>725
まあでも、擁護派・アンチ問わずありとあらゆる方面から「要らない」と言われた結果、
次バージョンでとっととイルカ消してくるのはいいところだと思う。
0730デフォルトの名無しさん2010/11/23(火) 02:29:27
>>723
なつかしいな
0731デフォルトの名無しさん2010/11/23(火) 02:46:08
お前らなぁ、言われる方の身にもなってやれよ!
>つぶやき始めてから、これまでにいただいたつぶやきで、一番多いのが「お前を消す方法」。。。たしかに、いろいろと言われてたのは知ってましたが。。。キュッ #saeko2010
0732デフォルトの名無しさん2010/11/23(火) 03:11:17
複数のWindowでデータバインディングするのはどうやんの?
WPFアプリ作った時に最初に出てくるMainWindowにテキストボックスが二つあって
その両方がバインドするやり方はわかった。
binding elementname=textbox path=text
みたいにやればいいだけみたいだ。これは簡単だった。

じゃあMainWindowの他に、CTRL+SHIFT+Aで新しい項目→WPFウィンドウ(名前はWindow1)を作り
その二つ目のWindow1にテキストボックスを配置し
Window1.TextBoxとMainWindow.TextBoxをバインドさせる方法はどうやればいいか教えてくれ。
0733デフォルトの名無しさん2010/11/23(火) 03:16:25
DataContextかBindingのSourceに共通のVMを入れてプロパティ経由で
0734デフォルトの名無しさん2010/11/23(火) 08:32:56
いまだに冴子先生が現役です・・・
0735デフォルトの名無しさん2010/11/23(火) 12:17:42
VS2010のメインレイアウトって、DockPanelかGridPanelに見せかけて、実はCanvasPanel?
0736デフォルトの名無しさん2010/11/23(火) 12:22:45
Grid だけども、Margin を駆使して Canvas っぽくレイアウトしてる。

一応、Grid のセル内の相対 Margin になるので、
Canvas よりは幾分かウィンドウサイズ変更に強いと思う。
0737デフォルトの名無しさん2010/11/23(火) 17:04:07
ListViewに4カラムで30行表示しただけなのにスクロール重すぎワラタ。内容は全部固定Textなのに。
一体何がどうしてこんなことになったのか分からないからどうやって改善すればいいのやら。
0738デフォルトの名無しさん2010/11/23(火) 17:09:50
2000行くらいになってくると重量感じるけど
30行だと何かやらかしてるとしか思えんな
0739デフォルトの名無しさん2010/11/23(火) 18:52:10
>>735
CanvasPanelというコントロールは御座いません。
0740デフォルトの名無しさん2010/11/23(火) 19:14:20
WinFormだけど,OwnerDrawの中でtrycatchで例外発生しまくりでlistviewが劇遅になったことならあるよw
0741デフォルトの名無しさん2010/11/23(火) 19:39:43
ばか?
0742デフォルトの名無しさん2010/11/23(火) 19:58:07
はい、あなたはばかです。
0743デフォルトの名無しさん2010/11/23(火) 20:40:55
VS2010の作業領域の背景って、グラデーション+ドット模様になってるじゃん
ワンパスで描画できるの?
0744デフォルトの名無しさん2010/11/23(火) 20:43:50
>>743
どういうのを言ってるかわからんがwinformでもグラデーションブラシを使えば2色の合成は簡単だけど
0745デフォルトの名無しさん2010/11/23(火) 20:44:22
テスト的にMとVMとVを分けてホイホイっと表示させるのは簡単だけど
いざ実際にアプリ作るのは設計がむじゅいね。
以前作ったFORMアプリを移植しようとしたらイベントぐちゃぐちゃで我ながら萎え萎え。
がんばる。
0746デフォルトの名無しさん2010/11/23(火) 20:57:22
>>745
MVVMは実際に設計すると非常に悩ましい。
 ・Command内の処理からダイアログをどうやって出そうか?
 ・フォーカス制御にはViewのインスタンスが必要じゃん
 ・値の検証はMでするの?VMでするの?
 ・"最大値"、"最小値"のようなパターンってどうやってエラーだすのよ
 ・数値入力フォームにアルファベットを入れたらどこでどうエラー処理する?
 ・一つのMで複数のVMが居る場合どうすんのよ、コレ
こういう綺麗にMVVMが当てはまらない場所全てで頭を抱え込むことになる。ガンバレ。
0747デフォルトの名無しさん2010/11/23(火) 21:24:38
>746
・VMのダイアログをだすよ処理にViewからインジェクト。だすよというよりIConfirmとかそんな感じ。
・フォーカスはViewですればいい。Focusなどの状態自体がVM、Mまたーなら話は別だが。
・MがVMからしかいじられないならVMで。でないなら両方ヤッとけ。
・VMでエラー吐いて表示などなどViewでやっとけ。
・上と同様。
・Observerパターン使え。
0748デフォルトの名無しさん2010/11/23(火) 22:08:36
RoRみたいにガチガチじゃないから逆に書きにくい…
0749デフォルトの名無しさん2010/11/23(火) 23:38:55
タブ型エディタみたいなのってMVVMだとどういう構造になるの?
外枠を担当するMVVMセットがあって、さらにタブ毎にMVVMセットがあるような
モデル?
0750デフォルトの名無しさん2010/11/23(火) 23:52:49
タブの1個1個がドキュメントよね。
その上位に、ドキュメントマネージャー的なのが居るのかな。

ウィンドウ自体のVMがドキュメントマネージャー持ってて、
タブごとのVMがドキュメント持ってるって感じじゃないかな。
0751デフォルトの名無しさん2010/11/23(火) 23:54:18
>>749
Evernoteクライアントのversion 3をダウンロードして動かしてみれ。
0752デフォルトの名無しさん2010/11/24(水) 01:33:55
>>750
やっぱりそんな感じよね
WPF自体経験ないからうんうん唸る

>>751
あれは重かった…
0753デフォルトの名無しさん2010/11/24(水) 01:39:32
だいたい、ビューが階層的ならビューモデルも階層にすればOK。
0754デフォルトの名無しさん2010/11/24(水) 01:57:42
MVVMでオプション設定ダイアログを作りたい
オプション設定のVは作ったのだけど、この後どのようすればいいですか?
Vの起動方法とVの設定値の取得方法が想像つかないんですが
0755デフォルトの名無しさん2010/11/24(水) 02:01:15
>>754
従来のタブ切り替えみたいな方式じゃなくて、
XAMLらしくリンクとして実装してあげるといいだろうね。
0756デフォルトの名無しさん2010/11/24(水) 03:01:47
データバインディング

TextBox.Textと普通のプロパティをバインdする方法はわかったんだが
インデクサはどうやればいい?

たとえばLabeの文字を
str[i]とバインドして

str[0]="A";
str[1]="B";
str[2]="C";

i=0になった瞬間LabelがAになって
i=1になった瞬間B、i=2の瞬間C

みたいな感じ。
ValueCangeイベントのようなイベントで処理したり
なんとかタイマーで、0,01秒ごとにLabelのContentを変える
みたいな処理しかわからない
0757デフォルトの名無しさん2010/11/24(水) 03:06:10
string hoge
{
get{return str[i];}
}
をバインドする

iのsetterでhogeのpropertyChangedをおこす
0758デフォルトの名無しさん2010/11/24(水) 03:53:39
>>756
そもそも i の変更に合わせてっての自体やらない。

i の変化自体、たぶん、ListBox の SelectedIndex とかの変化と連動してる場合が多いから、
i を介さず、直接 SelectedItem をデータバインディングしてしまう方が早い。

↓コレクション走査パスの指定ってのもできるし。
http://www.atmarkit.co.jp/fdotnet/chushin/introwpf_05/introwpf_05_02.html
0759デフォルトの名無しさん2010/11/24(水) 10:53:38
以下のxaml上のEventSetterをコードで書きたいのだが、書き方がわからない・・・

<Style TargetType="{x:Type ComboBox}">
<EventSetter Event="SelectionChanged"
Handler="SampleList_SelectionChanged" />
</Style>

動的にイベント有無を変更したいので、コードで書きたいのですが。
0760デフォルトの名無しさん2010/11/24(水) 19:45:24
そのまま書くだけだと思うけど
ルーティングイベントだけは〜〜Eventって名前の静的フィールド
0761デフォルトの名無しさん2010/11/25(木) 01:55:11
WPFいいなぁ
そろってるコントロールやパネルとかが優秀すぎて
XAML使ってもいいけど
仮に全部C#コードで書いたとしても別に問題にならない
0762デフォルトの名無しさん2010/11/25(木) 01:58:04
でもXAMLを知ればC#でなんでもやろうとは思わなくなるよ。
0763デフォルトの名無しさん2010/11/25(木) 02:05:10
XAMLって
プログラムの外観とロジックを分離させるために作った
みたいに書いてるけど
俺みたいな外観もロジックも一人で造らなきゃならないぼっちにとっても
勉強したほうがお得なの?
0764デフォルトの名無しさん2010/11/25(木) 02:11:53
>>763
というより、使わなきゃUIデザイナーの支援を受けられないんだから、嫌でも使うことになる。
0765デフォルトの名無しさん2010/11/25(木) 05:03:31
>>763
外観とロジックを分離することとぼっちは関係ないよ
0766デフォルトの名無しさん2010/11/25(木) 05:54:52
>763
宣言的にオブジェクトを配置するXAMLと、
手続処理を中心としたプログラムコード。
普通の静的なUIデザインには、前者の方が向いてるよね。
0767デフォルトの名無しさん2010/11/25(木) 06:01:04
WPFはまあ乱暴な言い方すればWinFormにブラウザコントロール貼り付けて
ローカルでhtml+css+javascript流し込んで実行してるような感じかな・・・

WinFormで凝ったGUIやると面倒だな〜->ブラウザコントロールが結構使えるなあ->WPFでいいじゃん
みたいな感じ

まー必要ない人には必要ないかもしれない
0768デフォルトの名無しさん2010/11/25(木) 06:07:55
>767
それはUIデザインのコーディングスタイルだけの話じゃないか?
WPFは強力なバインディング機構の方がキモだろ。
0769デフォルトの名無しさん2010/11/25(木) 06:52:41
xml自体がバインディング向けですしね
0770デフォルトの名無しさん2010/11/25(木) 07:23:37
でも、WPFは糞重いし、小規模なツール作るには手間がかかるだけ
UIデザイナー?そんな形態持ってる企業なんてない
0771デフォルトの名無しさん2010/11/25(木) 08:39:44
WPFが重いのはきっとMSがなんとかしてくれるよ。

きっと
0772デフォルトの名無しさん2010/11/25(木) 09:43:23
まだWPF重いのかよwww
0773デフォルトの名無しさん2010/11/25(木) 10:26:05
Boldフォント使うとすぐに字がにじむんだけど、どういうこと?
0774デフォルトの名無しさん2010/11/25(木) 13:55:39
WPFだとWndProcつかえんの?
0775デフォルトの名無しさん2010/11/25(木) 13:57:49
使える
0776デフォルトの名無しさん2010/11/25(木) 13:59:46
ふーん
0777デフォルトの名無しさん2010/11/25(木) 14:33:56
>>770
まだ小規模なツールでWinFormsより手間がかかると思ってる人居るんだ。
使ってから騒ぐ分だけコテハンのアイツの方がよっぽどマシだな。
0778デフォルトの名無しさん2010/11/25(木) 14:48:20
「オシャレなUIならWPF」とか言ってる奴もいるぞw
0779デフォルトの名無しさん2010/11/25(木) 14:51:07
いるいるw
0780デフォルトの名無しさん2010/11/25(木) 15:05:56
お前ら頭良すぎだな

お前らの脳味噌を俺の脳味噌にデータバインドしてくれよ
0781デフォルトの名無しさん2010/11/25(木) 15:19:00
それじゃちょっとこの音楽聴いといてくれるか
一万人分ぐらいの脳と繋がるから
0782デフォルトの名無しさん2010/11/25(木) 15:21:39
WPFでカスタムコントロール(Canvas継承)を作って、
Canvas上のControlに拡張プロパティを設定したいのだけどうまくいかない。

C#のIExtenderProviderにあたるWPFの機能ってなんでしょ?
DependencyPropertyでごちゃごちゃとやらないといけない?
07837822010/11/25(木) 18:31:49
AttachedPropertyBrowsableForChildren()で解決しました。
0784デフォルトの名無しさん2010/11/26(金) 03:10:23
グラフィックを半透明にしたり、画像の拡大縮小がきれいだったり

ゲームや簡易ペイントソフト作成用ですか
0785デフォルトの名無しさん2010/11/26(金) 04:07:37
XAMLのほうでは直接Width="100"みたいな定数しかできなくて
たとえばButton Width=button1.Height+30
みたいな足し算や掛け算を行ったりできないの?
こういうことしたかったらC#のコードでやらないと無理?
0786デフォルトの名無しさん2010/11/26(金) 04:28:26
まずやりたいことが、Gridなどのコンテナで実現できるか考えよう。
それでも無理ならバインドしてコンバーターで計算させるとかじゃね?
0787デフォルトの名無しさん2010/11/26(金) 09:01:28
キャンバスをEXCELのように多数のセルに分けて、それぞれ文字を入力させる。
で、フォームがリサイズされたらセルの大きさもその割合に応じて変わる。

こんなプログラムはWindows Formのほうがいいのかな?
0788デフォルトの名無しさん2010/11/26(金) 09:47:33
>>784
グラフィックきれい = ゲーム って発想やめようよ。
いわゆる可視化、見える化とかが有効とされるものならなんにでも応用効く。

>>785
コンバーター書いて Binding するか、
データコンテキストに渡した ViewModel 内で +30 するか。
どっちにしろ C# コード書くね。

>>787
リサイズへの追従とかそれこそ WPF 向きじゃない。
0789デフォルトの名無しさん2010/11/26(金) 09:52:22
ファイルのドラッグ&ドロップ部分を書こうとしているとこなんだけど
MVVMの場合イベントはすべてDeleteCommandを通して書くの?
0790デフォルトの名無しさん2010/11/26(金) 10:02:04
MVVMは質問してまでやることじゃない。
自分が無理なくやれる方法でやることが重要。
0791デフォルトの名無しさん2010/11/26(金) 10:16:04
ドラッグ&ドロップみたいなビュー内で完結してるものは
むしろビヘイビアで書く方がいいよ。
0792デフォルトの名無しさん2010/11/26(金) 10:31:21
ドラッグ&ドロップ部分はView.csで書いて
リストに追加された時にBindingで値を取得するってことでいいのかな
0793デフォルトの名無しさん2010/11/26(金) 12:41:13
MVVMの雛形を毎回作るのが面倒なんだけど
何か良い方法ないですか?
テンプレートみたいなものは自分で作れるんだっけ?
0794デフォルトの名無しさん2010/11/26(金) 13:42:47
その程度のことが面倒に感じるようなものにMVVM適用するのはどうかとおもうけど
必要ならPrism Template Packでも使えば
0795デフォルトの名無しさん2010/11/26(金) 13:45:03
Prismって何かバグがあったような気がするんだが
0796デフォルトの名無しさん2010/11/26(金) 14:09:36
>>794
なにそれ?
0797デフォルトの名無しさん2010/11/26(金) 21:02:09
何かバグはあるさ!
0798デフォルトの名無しさん2010/11/26(金) 22:58:04
>>793
テンプレートでできなくもない。t4 templateでぐぐると、いくつかmvvmのコード自動生成の作例が出てくる。
WPFはもっとコードの自動生成を取り入れないと普及しないだろうねえ。
イベントハンドラのスタブをタブキー二回で作ってくれるぐらい簡単に。
0799デフォルトの名無しさん2010/11/27(土) 01:28:16
xamlにインラインコードが使えるようにならないかな…
0800デフォルトの名無しさん2010/11/27(土) 07:31:38
VMのプロパティはEXCELとか正規表現とかでなんとか生成できるレベルだけど、
DependencyProperty実装するときのの凶悪なコーディング量はどうにかしてほしいもんだ
■ このスレッドは過去ログ倉庫に格納されています