WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part7
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/08/22(日) 21:11:53Windows 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/
0585デフォルトの名無しさん
2010/11/14(日) 00:05:06どうやったらできなかったの?
0586デフォルトの名無しさん
2010/11/14(日) 00:05:150588582
2010/11/14(日) 00:33:18データクラスで保持してるコレクションデータを
ObservableCollectionに毎回追加しないといけないから
やっぱりList<string>のボタン名でそれぞれのボタンで表示して
任意のボタンを削除するならDataTemplateですか?
0589デフォルトの名無しさん
2010/11/14(日) 00:59:03List をラップした INotifyCollectionChanged 実装クラス作るのがいいと思うけど、
面倒だからよく ObservableCollection にコピー持たせる。
モデルとかビューモデル側でコレクションに要素足したときに
即座にビューに反映されて欲しければ INotifyCollectionChanged 必須。
0590デフォルトの名無しさん
2010/11/14(日) 01:19:59カスタムコントロールのXamlはルート要素がResourceDictionaryだからハンドラ指定はできないはずだが。
0592デフォルトの名無しさん
2010/11/14(日) 01:30:04さすがにそんな上のレベルでListに依存するのは設計としてまずい
0593582
2010/11/14(日) 01:38:57ビューモデルにINotifyCollectionChangedを実装しても
List<T>.Addでは変更通知されないですね
List<T>クラスを自作してそこにINotifyCollectionChanged入れるしかないのかな
そうなるとObservableCollectionでプロパティ公開してデータクラスのList<T>の値を追加していく方が楽なのかな
0594デフォルトの名無しさん
2010/11/14(日) 03:57:45そうだった
0595デフォルトの名無しさん
2010/11/14(日) 04:53:27<ItemsControl ItemsSource="{Binding Names}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</WrapPanel>
上記だとただ縦に並ぶだけです
パネルのデータテンプレートってどうすればいいですか?
かれころ5時間ぐらいぐぐってもわかりません
助けて
0596デフォルトの名無しさん
2010/11/14(日) 05:29:43もっと柔軟に、レイアウト方法を自作したいなら
Panel クラス継承して MeasureOverride とかを自作。
0597デフォルトの名無しさん
2010/11/14(日) 06:02:38質問する前からその単語でもぐぐってます
ItemsPanelTemplateでもぐぐってるけど
同じようなコードが見つからないんです
前にテスト用に作った時はあっさり作れたのでメモってなかったのが失敗
0598デフォルトの名無しさん
2010/11/14(日) 06:30:440599デフォルトの名無しさん
2010/11/14(日) 07:06:02世界的に見て日本のプログラマのスキルが低い所以なんだろうね
優秀なソフトはいつも海外
ゲームも海外
日本は自社製の糞重いフレームワークで時代遅れのゲームしか作れない
0600デフォルトの名無しさん
2010/11/14(日) 07:25:420601デフォルトの名無しさん
2010/11/14(日) 08:29:47むしろ基礎すら理解できていないコード切り貼り魔がいることが原因だと思う。
5時間ググる前に何が足りないか3分考えろ。
0602デフォルトの名無しさん
2010/11/14(日) 08:34:220603デフォルトの名無しさん
2010/11/14(日) 14:38:39データクラスでList<T>公開して
周りから弄繰り回すこと自体が間違ってるよ
実際に実装の変更に対応できてないわけで、publicフィールド公開してんのと一緒だぞそれ
0604デフォルトの名無しさん
2010/11/14(日) 18:39:16お前はデータクラスの値をVMで毎回コピーしてVに公開してんのか?
0605デフォルトの名無しさん
2010/11/15(月) 07:58:04頭使えよ。。。
0606デフォルトの名無しさん
2010/11/15(月) 20:41:58<Button Height="3*"/>
<Button Height="2*"/>
みたいに。
今までだとちょっとだけ面倒だったな
0607デフォルトの名無しさん
2010/11/15(月) 22:22:570608デフォルトの名無しさん
2010/11/15(月) 22:40:570609デフォルトの名無しさん
2010/11/15(月) 23:10:23多言語対応したりフォントサイズ変更したりに強いし。
0610デフォルトの名無しさん
2010/11/15(月) 23:12:350611デフォルトの名無しさん
2010/11/15(月) 23:18:050612デフォルトの名無しさん
2010/11/16(火) 01:53:34古いWindows Formアプリケーションだと
デザイナで変更された部分は基本的に隠されててキモかった。
Button1.click += button1_Click;
この部分が隠されてて
button1_Click(object,eventargs)
だけ現れててマジきもい
0613デフォルトの名無しさん
2010/11/16(火) 06:46:06WPFの方が別ファイルでコソコソ作られててキモイ。
0614デフォルトの名無しさん
2010/11/16(火) 07:08:07WinFormsも別ファイルだろ
0615デフォルトの名無しさん
2010/11/16(火) 07:27:200616デフォルトの名無しさん
2010/11/16(火) 08:01:22直接弄れるWPFのが便利
0617デフォルトの名無しさん
2010/11/16(火) 10:24:090618デフォルトの名無しさん
2010/11/16(火) 11:04:03どこが隠蔽されてるって?XAMLが理解できないって話か?だとしたらお前が悪いw
あれは宣言型言語でオブジェクト ツリーを構築しているだけ。
全てWinFormsに似た等価な手続型言語で表すことができるが、
誰もやろうとしないのはそれがメンテナンス性を著しく損ねてしまう結果に終わると知っているから。
ま、WPF使った事ない人は表面だけ見て隠蔽されてるように感じるのだろう。
0619デフォルトの名無しさん
2010/11/16(火) 11:21:09プログラミングにどっぷりつかってる人間ってコミュニケーション能力低いってよく言われるが
こういうことなのでしょうな。
0620デフォルトの名無しさん
2010/11/16(火) 12:18:550621デフォルトの名無しさん
2010/11/16(火) 13:38:02最初、C#の文法だけでなくこっちも覚えなきゃならないのかよ
とか思ってたら案外簡単だった。
<Button Height="200">
みたいに書けばいいだけみたいだ。
むしろButton button1=new Button();button1.Height=100;
とかやるより簡単かもしれんね。
0622デフォルトの名無しさん
2010/11/16(火) 13:51:170623デフォルトの名無しさん
2010/11/16(火) 13:58:12トグルのIsCheckedとメニューのIsOpenをバインドして、表示させることはできたけれど、
右ボタンで、通常通りポップアップさせたときにはContextMenuService.Placementで指定したならびになるのに
左ボタンで、バインディング通して表示させたら、マウスカーソルの位置にポップアップされてしまう
どうすればいいの? プログラム書いたらすむんだろうけど
0624デフォルトの名無しさん
2010/11/16(火) 14:01:52何じゃこの気持ち悪い書式はー!!
とプリプリした。
0625デフォルトの名無しさん
2010/11/16(火) 14:23:21煽りだけで本題書いてないwww
0626デフォルトの名無しさん
2010/11/16(火) 18:05:23いろんなサンプル見てると、閉じるボタンを付けたり、各タブに関係しそうなんだけど、
じぶんでちっちゃいコード書くとなんにも変わらない
0627デフォルトの名無しさん
2010/11/16(火) 18:17:28TabControl.ItemsSourceにバインディングしてる?
0628デフォルトの名無しさん
2010/11/16(火) 18:51:440629デフォルトの名無しさん
2010/11/17(水) 02:43:45ただ文字表示するだけでしょ?ほとんど同じに見えるんだが
何が違うの
0630デフォルトの名無しさん
2010/11/17(水) 03:35:51Labelはコントロールの説明用。
アクセスキーを設定して他のコントロールにフォーカス移したりできる。
TextBlockは少量のテキストをUIに表示するための物。
1行の表示に最適化されているけど数行まで高いパフォーマンスを発揮する。
数行以上のテキストを表示する場合はFlowDocumentを使う。(下に行くほど多機能で重い)
FlowDocumentScrollViewer スクロール表示
FlowDocumentPageViewer 1ページ単位のスクロール
FlowDocumentReader ユーザが表示モードを切り替える場合に使う
---
この辺は低レベルで滅多に使わないけど
Glyphs と GlyphRun を使用してグリフ レベルでテキスト コンテンツを生成するのが最速。
書式指定された文字列を描画したいならFormattedTextが適している。
0631デフォルトの名無しさん
2010/11/17(水) 03:40:59慣れたらもっと早くなるのか・・・?
保守は楽だけど、作るまでが大変
やっぱりコンソールアプリが最強だな
0632デフォルトの名無しさん
2010/11/17(水) 04:15:11説明が書いてないし
タイマーコンポーネントとか
OpenDialogやSaveDialog
みたいな便利なコンポーネントも標準でついてないんだね。
残念
0633デフォルトの名無しさん
2010/11/17(水) 05:37:20そもそも非UIデザインのコントロールなのに存在してたのがおかしい。(WM_TIMERの大義名分はあったけど)
UIスレッドで処理するならDispatcherTimer
>OpenDialogやSaveDialog
それは標準である。
Microsoft.Win32.OpenFileDialog
Microsoft.Win32.SaveFileDialog
.NET3.5まではXP風のクラシックスタイル、.NET4はVista風の新しいスタイル。
.NET3.5でVista風スタイル、.NET4でXP風スタイルを使いたい場合はWinFormsのDialog
WPF使ってるのにWinFormsのアセンブリから読み込むのはいい気分じゃないけど、同じのを再定義されるよりは遥かにマシだな。
0634デフォルトの名無しさん
2010/11/17(水) 11:46:17例えば、VM上で公開しているbool値のプロパティ IsEnableとバインドしているとして、
IsEnableがTrueの場合: Label Content="可能"
IsEnableがFalseの場合: Label Content="不可能"
といったことがしたいです。
TriggerかDataTriggerを使えばできそうなんですが、書き方がよくわからず、Intellisenseに怒られてばっかりで。
0635デフォルトの名無しさん
2010/11/17(水) 11:46:470636デフォルトの名無しさん
2010/11/17(水) 12:20:52普通にDataTriggerの中にSetter入れて文字列変更できるはずだけど
そういう可/不可みたいな一般的なものだったらIValueConverter実装してもいいと思う
その方が使いまわしが楽
0637デフォルトの名無しさん
2010/11/17(水) 16:13:40x : Key = "MyButton" TargetType = "Button"
みたいなx :keyいうのがついたらリソース
つかないで
TargetType = "Button"だけならスタイル
でいいのか?
0638デフォルトの名無しさん
2010/11/17(水) 16:44:11リソースは最初に用意しといて後で使い回しましょう、って奴で
スタイルはプロパティの設定のセット。比較するのがそもそもおかしい。
で、エスパーレスすると、
x:Keyつかないと<Button>全部に適用
x:Keyついたら<Button Style="{StaticResource キー}"> だけに適用
0639デフォルトの名無しさん
2010/11/17(水) 17:33:180640デフォルトの名無しさん
2010/11/17(水) 17:36:170642デフォルトの名無しさん
2010/11/17(水) 19:45:000643デフォルトの名無しさん
2010/11/17(水) 19:50:39スキルもないのに自己顕示欲は人よりも強いの?
0644デフォルトの名無しさん
2010/11/17(水) 19:59:41いつ変な吹き出し方してくるか分からんし判別出来た方がいい
0645デフォルトの名無しさん
2010/11/17(水) 21:25:51まぁコテなくてもすぐ判別できるぐらい鬱陶しいけどなw
いつも変わらぬアホさに安心感すら覚えるようになってきた。
人並みの頭はないけど少しは身に付けて前進している点は評価したい。
こんなのでも使いもせずに見当違いの所を叩いてる連中よりは遥かにマシ
なぜそのようにしているのかひとつひとつ調べていくこと
そうすれば今の俺みたいにWPFマスターになれる
俺の作り方はまずコンソールアプリを作る
ロジックだけに集中するため
そしてどうしてもコンソールじゃ足りないGUI部分が見えてくる
そしたらそのロジックを利用してWPFでGUIを作る
このアプローチはWPFに最適だと思う
Winフォームの場合、その手軽さからまずGUIを作りながら
いろいろイメージしていって、データやコントロールするクラス
を作ったりするだろうけど、WPFではおすすめしない
WPFではまず、データ構造とロジックから作り始めた方が効率がいい
簡単なツールの場合はWPFが必要ない場合が多いしね。
0647デフォルトの名無しさん
2010/11/17(水) 21:44:070648デフォルトの名無しさん
2010/11/17(水) 21:46:310649デフォルトの名無しさん
2010/11/17(水) 22:47:35コンソールと比べんなw
まあ、マニュアル作らず使ってもらえるとか、
たいていの人でも触れるとかそういう足かせはめるとコンソールの方がかえって楽だけど。
0650デフォルトの名無しさん
2010/11/17(水) 22:47:530651デフォルトの名無しさん
2010/11/17(水) 22:50:160652デフォルトの名無しさん
2010/11/17(水) 23:11:060653デフォルトの名無しさん
2010/11/17(水) 23:19:53今気がついたが、ComboboxにAllowDropを設定したけど縁にしかdropできない…
PART_EditableTextBoxにもAllowDropを設定しろってことかw
0654デフォルトの名無しさん
2010/11/17(水) 23:20:36「かっこいい外観」が特徴の一つらしいが
それ使うのはExpress Brendとかいう70000円もするソフト必要らしいな。
単純な外観のならVisual Studioでもいいけど、3D表示やあにめーしょん駆使しまくって派手なソフトは
きついらしい。
0655デフォルトの名無しさん
2010/11/17(水) 23:25:24Adobeのひとしきり入ってるやつだから。
0656デフォルトの名無しさん
2010/11/17(水) 23:26:29それこそExpressですら対象だから定価は罠。
0657デフォルトの名無しさん
2010/11/17(水) 23:27:330658デフォルトの名無しさん
2010/11/17(水) 23:28:29確かにどうとでもなる。
0659デフォルトの名無しさん
2010/11/18(木) 00:01:080660デフォルトの名無しさん
2010/11/18(木) 00:17:29上の人はそれがわかってるから買ってくれんのです
0661デフォルトの名無しさん
2010/11/18(木) 00:18:20MSもそう言ってる。
0662デフォルトの名無しさん
2010/11/18(木) 00:35:06まずVSでWPFアプリケーション作成して
MainWindowとかいうのが出てくるから、XAMLでName="MainWIndow"
に変更
次にSHIFT+CTRL+Aで新しい項目→WPFウィンドウ
これで二つ目のWPFのほうにName="SubWindow"
ってやって
MainWindowのコンストラクタの部分に
SubWindow.Show()
みたいに書いても、SubWIndowは存在しません
とか言われる。
0663デフォルトの名無しさん
2010/11/18(木) 01:00:06かっこよくて使いやすいならそれがいいね。
>>662
子ウィンドウ作成
SubWindow subWnd = new SubWindow();
subWnd.Owner = this;//親ウィンドウのインスタンス
subWnd.Show();
0664デフォルトの名無しさん
2010/11/18(木) 01:06:230665デフォルトの名無しさん
2010/11/18(木) 02:19:170666デフォルトの名無しさん
2010/11/18(木) 03:05:37テキストボックスとボタンを配置して、テキストボックスに書かれている内容が
ボタンのContentになる、よくあるサンプルみたいなもの作ってみたんだが。
<TextBox Name="T"/>
<Button Content="{Binding ElementName="T" Path="Text}"/>
こんな感じにしてみたんだが、エラーになる。
<Button>
<Binding ElementName="T" Path="Text"/>
</Button>
ってやったら、ちゃんと動いた。
データバインディングの{Binding なんちゃら}
って直接書かずにプロパティ要素構文として書かないとダメなの?
0667デフォルトの名無しさん
2010/11/18(木) 03:13:27<Button Content="{Binding ElementName=T, Path=Text}"/>
0668デフォルトの名無しさん
2010/11/18(木) 03:18:40なぜ
<Button>
と</Button>の間にBindingを入れると
ElementName="T"
みたいに"が入ってるのに
Content=で直接書いたら"を入れちゃいけないんだ?
変な規則だなー
0669デフォルトの名無しさん
2010/11/18(木) 03:29:50二重引用符入れ子にすんなよw
文字列の中に二重引用符入れたいなら(XAML,C#に限らず)普通エスケープするでしょ "\""
引用符を入れ子にしたいなら二重引用符["]の中に引用符[']入れるってのもよくある一般的な方法。
なんでこんな初歩的な事に気が付かないんだw
0670デフォルトの名無しさん
2010/11/18(木) 07:23:04いろいろ捗るぞ
0671デフォルトの名無しさん
2010/11/18(木) 09:51:57XML だからしょうがないだろ。
あと、Content="{Binding ...}" の方はマークアップ拡張、
<Binding ... /> の方は要素構文で、XAML のパース方法が違う。
0672デフォルトの名無しさん
2010/11/18(木) 16:32:12XAMLのコードエディタがバグや使いづらい点が多すぎる
ダメだこりゃ
0673デフォルトの名無しさん
2010/11/18(木) 18:33:560674デフォルトの名無しさん
2010/11/18(木) 20:04:58WPFより先にXML覚えれ
0675デフォルトの名無しさん
2010/11/19(金) 00:45:10表示されない。2010 使いたいよい
0676デフォルトの名無しさん
2010/11/19(金) 14:45:47複数の同じようなコントロールがあるときそのコード上の配置を同じにするにはどうやればいい?
<Rowdefinition Height=なんちゃら name=なんちゃら VerticalAlignment=なんちゃら・・・ その他/>
<Rowdefinition Name=なんちゃら margin=なんちゃら VerticalAlignment=なんちゃら name=なんちゃら 他/>
みたいなぐちゃぐちゃしたコードになってなんとなく気持ち悪いんだけど上と下を自動整理するにはどうしたらいい?
そういう昨日ないの?
0677デフォルトの名無しさん
2010/11/19(金) 14:50:13配置を同じって、どういう意味だ。同じ箇所にまとめるということなのか。
同じ座標に重ねて配置するという意味なのか。
気持ち悪いけど上と下を自動整理ってなんだ。
質問が曖昧過ぎる。
0678デフォルトの名無しさん
2010/11/19(金) 14:51:380679デフォルトの名無しさん
2010/11/19(金) 14:56:530680679
2010/11/19(金) 14:57:530681デフォルトの名無しさん
2010/11/19(金) 15:05:46外部ツールにXML整形ツールでも登録した方がいいと思う。
0682デフォルトの名無しさん
2010/11/19(金) 15:06:460683デフォルトの名無しさん
2010/11/19(金) 15:21:10自分でやるしかないのかー
面倒だな
<Width="100" Name="ABC" Height="200"/>
<Name="DEF" Height"300" Width="200"/>
みたいな書き方マジきもい
一行が短いならまだいいけど、長いとキモ過ぎる
0684デフォルトの名無しさん
2010/11/19(金) 16:21:58要素名と属性って次元の違う話なんだが
■ このスレッドは過去ログ倉庫に格納されています