WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part4
ContextMenu に ItemsSource と ItemContainerStyle を設定しました。 ContainerStyle は下記のようにしました。 <Style x:Key="menuItemStyle" TargetType="{x:Type MenuItem}"> <EventSetter Event="Click" Handler="MenuItem_Click" /> </Style> サブメニューがない項目ではクリックイベントが発生するのですが、 サブメニューがある項目でもクリックされたことを知りたいのですが どうすればよいのでしょうか?
前スレの最後哀れ
>>前スレ1000 なんて恐ろしい子ww
前スレ、もう落ちてるよ
1000 名前:デフォルトの名無しさん[] 投稿日:2009/06/20(土) 01:18:06 1000なら、Visual Stido 2010が開発失敗して発売大幅延期、 WPFが使い物にならないと証明される 1001 名前:1001[] 投稿日:Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。
わざわざ張らんでよろし
ザメルって、なんかエロいから人前で言いにくい いまのところ開発で XAML 使ってないから大丈夫だけど
ザムルってよんでた
ザムルだろう eはどっからでてきた
エレメントが LMN(el em en) の読みから来てるようにML を emel と呼んだんだろ The ML とも通じるからな。ただの音遊びだが
>>11 ある本には
pronounced zammel
と書いてある。
自分で作ったコントロール(Imageを継承)をxamlで使うにはどうしたらいいの?
CPUがCore 2 Duo E6600のPCを使ってるんだけどXAMLエディタが重くて使いにくい どの程度のCPUなら快適に使えるんだろう? 人によって快適さの基準は違うと思うけど、 新しいPCを買う時の参考にしたいので、使ってるPCと快適さを教えて欲しい
>>16 i7だけど重いよ
Blendの方が1億倍マシ
そりゃ酷いな Blend3でIntelliSenseもサポートされるみたいだし、VS1本でやるのは諦めるか・・・
Blendも無料版だしてくれよバルマー
MS開発者のビデオ見てるとザメルって言ってるよね
でぃれくてっくすと、だいれくとえっくすじゃ大違いだが、 XAMLはそんなに違わない。
なんだよ、このスレは
xamlのスレだろ
>>15 に答えてください
お願いします
ざめる
いいよ、もう 数時間格闘した結果自己解決したから お前ら役に立たないな
初めてWPFで開発することになり、色々調べています。 やりたい事は、ユーザーにxamlで画面を作成してもらい、C#でそれを読み込み表示するアプリを作りたいです。 色々と調べてみたのですが、イマイチピンときません。 宜しければ何かヒントを頂けると助かります。
>>25 なんだxamlを書いてもらうのか、つまらん
28 :
25 :2009/06/23(火) 23:39:57
とりあえずXamlReader.Loadとかで試したら多少できそうです。
ただ、xamlをの頭の部分をWindowsからCanvas等へ多少手直ししないといけないみたいで、
少しやりたい事多少外れてしまいます。
>>26 さんや
>>27 さんの反応から簡単にできるっぽいので引き続き勉強してみたいと思います。
29 :
デフォルトの名無しさん :2009/06/24(水) 00:08:34
XAMLってすごいですね。 外観の自由度もさることながら、 コントロールの組み合わせも自由なところが。。 ただ、どういう組み合わせが魅力あるUIなのか想像できない。 ComboBoxとかListBoxなんかはWrapPanelの中にImage+TextBlockでとかでいいとか ありきたりな想像は出来るんですけど、それ以上のアイデアがないというか(見たことないからか..) ただ、DataGridコントロールのグループ化とか詳細表示のような機能には期待している。
>>29 ボタンの中身を画像とか、やろうと思えばとことんカオスな事ができるからねぇ。
そういやその自由度を使って、VS2010を痛IDEに、ってやってたところがあったようなw
インテリセンスのポップアップの見た目をアニメキャラにしていたとオモタ。
でも、カオスにできすぎて、他人の書いたxamlは大抵読むのに苦労するw
31 :
デフォルトの名無しさん :2009/06/24(水) 00:29:23
そのうち、XAMLデザインパターンとか出てくるんでしょうかね。
ボタンの中身を画像なんてUSERでもできるだろ。 ボタンの中身をテキストボックスとかのほうが恐ろしい。
33 :
デフォルトの名無しさん :2009/06/24(水) 09:51:35
>>32 ちょw その組み合わせはまずいでしょう
質問ですが、WPFとSilverlightのコントロールの差異がぱっと見 わからないんですが、
この辺の一覧表とかあったりするんでしょうか?
自分でコツコツ調べるしかないかしら・・・
(例)
WPF Silverlight 備考
Label ○ ○ 同等
TextBox ○ ×
ListBox ○ ○ Silverlight側は○○が無い
ComboBox × ○
ViewBox ○ ○ WPF側は○○が無い
:
:
35 :
デフォルトの名無しさん :2009/06/24(水) 11:38:55
ActualWidth、ActualHeightを変更するにはどうすればいいですか? Width,Heightに値を入れてもすぐには変化してくれません
<cars> <car> <maker>トヨタ</maker> </car> <car> (以下略) <cars> みたいな xml の maker を ListBox にバインドしました。 トヨタ車はいっぱいあるので重複して表示されてしまうのですが、 重複をのぞいて表示するにはどうしたらよいですか?
重複を除いたものをバインドする
トヨタ車が重複するのは当然の真理
<RowDefinition Name="rd" Height="24" /> <RowDefinition Height=rd.Heght /> のようなこと出来ないんですか?
<RowDefinition x:Name="rd" Height="40" /> <RowDefinition Height="{Binding ElementName=rd, Path=Height}" />
MSDN Forumに行ったっぽいよ
そうか、ならいいか
47 :
38 :2009/06/27(土) 14:57:03
>>39 なるほど。
思いつかなかったw
ありがとう。
WPF の XPath って > person[sex='man'] みたく書けないみたいだけど、 ノードの絞り込みしたいときはどうするの?
使えるよ ただし一部文字にエスケープ必要 Binding.XPath のサンプルにある コメントアウトされてるけど
50 :
48 :2009/06/28(日) 10:50:17
>>49 レスありがとう。
教えてくれた方法で無事できました。
感謝。
<maker>トヨタ</maker> というデータを表示しようとして下記の DataTemplate を作りました。 <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Name="tbCaption" Text="{Binding XPath=local-name()}"></TextBlock> <TextBlock Name="tbValue" Text="{Binding XPath=text()}"></TextBlock> </StackPanel> </DataTemplate> tbValue はちゃんと取得できていて"トヨタ"と表示されるのですが、 tbCaption には maker と表示したいのですが、local-name() ではだめみたいです。 どうすればよいでしょうか?
どんだけトヨタ推しなんだよ
53 :
51 :2009/06/28(日) 19:30:11
すいません。じゃ、 <maker>光岡自動車</maker> でお願いします。
<GridViewColumn Header="Text" Width="300" DisplayMemberBinding="{Binding XPath=.}" /> とすると、バインディングされてるデータが <List> <Item>Foo</Item> <Item>Bar</Item> </List> のとき、FooBar と表示されます。 これを Foo/Bar と表示したい(間に文字を入れて連結したい)んですが、 Converter を作る以外に方法ありますか?
CellTemplateを書く
フォントファミリからBaseUriを取得したいけど 作成時にUriを指定していない場合はBaseUriはnullになってしまう。 >var family = new FontFamily("メイリオ"); >family.BaseUri; // null! Fontsからだと、BaseUri付きのファミリが取得できるかも?と思って試したけどnull >var q = Fonts.SystemFontFamilies.Where((val) => val.BaseUri != null); 断念して妥協するか、システムフォントを片っ端から調べるか・・。
57 :
デフォルトの名無しさん :2009/07/12(日) 08:22:10
今まで専らMFCでプログラミングしてきたんだが、 CDocument的なものはどこに置くべき? ウィンドウのコードに依存プロパティとして実装? もうWPFわけわからんw
自分でDocumentManagerみたいなのつくっとくべ気だろ。
>>58 質問が分かりにくくてすまん。
そのインスタンスはどこに保持するのかって質問なんだ。
>>60 なかなか難しいな
頑張って解読してみる
ありがと!
62 :
57 :2009/07/12(日) 16:17:29
>>60 読んでみた
Model-View-ViewModelでやると、
ViewModel同士の同期が非常に煩雑になる気がするんだがそうでもない?
(
>>60 のサンプルでも煩雑になってる気がする)
本屋に行ってWPFの本を探してみたが
どれも簡単なコントロールやスタイルの組み方までしか書いてねぇ。
ここはexpression blendの使い方の質問してもおkな場所か?
いいえ
>>62 俺も綺麗なやり方が分からず悩みどころ。
あとVとVMの連携が必要な所も酷いことになる。
例えば、ボタンを押したらダイアログを表示、をやろうとしたら
ダイアログに対応するVMを作るのと、ダイアログの表示処理は誰がやるんだろう?
選択肢を選んだら即時ダイアログを閉じる場合、VMへの値の反映をバインドでやるとすると
ダイアログを閉じるのはどうやるんだろう?
って感じで複雑な物を作ろうとするとV→VMが依存しまくり。
うまく行く設計方針とかないのかしら。
66 :
57 :2009/07/12(日) 22:06:24
もうMVCで書いてしまおうか。 それともフレームワークのようなものを作れば MVVMでも多少ましになるのかな。
>>65 コマンドは使ってるんだよね?
>例えば、ボタンを押したらダイアログを表示、をやろうとしたら
>ダイアログに対応するVMを作るのと、ダイアログの表示処理は誰がやるんだろう?
Vはコマンドを発行するだけ(VM側の実装を知らなくていい)
コマンドを受け取って、ダイアログのV,VMを作って呼び出すのはVMの役目。
>選択肢を選んだら即時ダイアログを閉じる場合、VMへの値の反映をバインドでやるとすると
>ダイアログを閉じるのはどうやるんだろう?
その程度のやつならVで閉じちゃえば?
妥当性検証をパスして、OKボタン押すまでソースへの通知を遅らせたい(CANCEL時に無かった事にしたい)時とかはVMがないと見通し悪くなる。
>>67 前者は、コマンドは使っているけれど
> ダイアログのV,VMを作って呼び出すのはVMの役目。
これって不味いのでは?
「V→VMの依存関係を一方向にすれば、テスト楽だよ」ってのがMVVMの味噌な気が。
VMがVを作ると、VM単体で単体テストしにくくなって不味いかと。
後者は、自分が選んだのもその方法(コードビハインドで全部処理)だけど、
コマンドを使うところと使わない所が出来るってのがちょっと嫌な感じ。
自分のMVVMのやり方じゃ7割ぐらいまでは綺麗に適応できるけど
3割ぐらいは外れるか、アドホックに汚いやり方で誤魔化しちゃってます。
69 :
デフォルトの名無しさん :2009/07/13(月) 14:15:50
>>60 おお、いい記事を紹介してくれた。ありがとう。
71 :
57 :2009/07/13(月) 19:42:17
>>69 このUIかっけぇ
そしてコード勉強になる
ありがと
73 :
デフォルトの名無しさん :2009/07/17(金) 20:17:07
MSに点在するSilverlightのサイトを見ていたら WPFと同じような使用例ばかり出てきて、WPFはどうしたいのかわからなくなる
どっちも同じように書けるってこった
76 :
デフォルトの名無しさん :2009/07/19(日) 00:06:09
RadioButtonのバインドって微妙で使いにくいですね。 ListBoxとかで作ったほうがすっきりするかしら・・・
どうするんのがスマートなんだろうね。 自分の場合、Enumと合わせるなら他の人も作っている EnumBooleanConverterをパクって使っている。これはかなり楽。 Enum以外のデータ、他の特に可変個数のデータ数の選択の場合は、 自作ViewModelクラス(選択肢の表示内容や対応付けられたデータを保持し 選択されたらイベントを飛ばす)を使っている。
てすつ
SilverLight3になってから、サンドボックス内とはいえローカルで実行できるとか・・・。 キャッシュとしてローカルのディスクにデータとか書き込めるのかね・・・。
>79 2番目は IsolatedStorage でSL2の段階で出来る ローカル実行は俺も知りたい
WPFToolKit入れて、VSMを使いたいのだが、GotoStateでNull例外。 Silverlightと違ってGotoStateを明示的に呼び出す必要がないとか。 なのでCommonStatesグループを作って、Pressedのステートを作ってみたが無反応。 どうやったら使えるかな?
WPFわけわかんねーなー。 特に作法みたいなのがさっぱりだ。 MVVMのテンプレートでコマンド登録する場合って、 ViewModelに起動させたいコマンドの数だけ、延々と 登録していくもの? なんか同じコードばっかり書いてる気がする。
>>68 MainView上のボタンを押してダイアログを表示の場合、
Vはコマンド発行するだけだよね?
コマンドの受け取り側のVMが新規ウィンドウのVとVM作ったら、
複雑になってMVVMにはならないのは理解できるんだけど、
もしそうなら、コマンドの受け取り側はどこに実装したらいいん?
コマンド用のVMを作って、コマンドは全部コマンド用VMを経由させるん?
>>83 VMとVをきっちり分けるとなると、
1. Vに登録したICommand(VM)で操作を受け取って、
2. VMで表示するダイアログのVMを生成して
3. VMがVにデリゲート経由でダイアログのV生成を依頼して
4. Viewがデリゲート経由で受け取ったダイアログのVM+自分で作ったVで表示
全く美しくないw
85 :
デフォルトの名無しさん :2009/07/28(火) 21:43:24
MiniUMLのソースを見ると、 Command(ViewModel)でファイルダイアログを呼び出してるけどね。 RelayCommandでは、ViewModelにメソッドを書けるのが利点なので、 新しいダイアログはViewModelで生成するいいんでないの? ユニットテスト的にその部分の評価がしずらいのかもしれんけど。
MVVMはあくまでデザインパターンであって規約ではないよというのが回答になりそうだなぁ。 Composite Application Guidanceのほうも勉強してみるかぁ。
MVVMはModelとViewを直結するとモデルの編集なり何なりがゴリゴリ過ぎるから、その辺のつなぎ部分をそのビュー専用のVMにまとめてナイスに分けられたぜ、ぐらいの感じでいいかと。
でも、Vと切り離してM+VMでテストできてラッキー! てのは結構重要なことだと思うんだ。
89 :
デフォルトの名無しさん :2009/07/28(火) 23:52:17
UIをUIAutomationとか使う方法でテストより、 論理的にテストできるってのは意味は大きいと思う。
ところで、音楽とか動画を再生する処理って、MVVM だと View になるの?
音楽の使い方によると思うが、メディアプレーヤーみたいに聴く目的ならVMを通じてModelが再生処理をするのかな。 UIを華やかにする目的で流すならViewかな。 動画はVMとView間で何を渡せばいいんだろう。
多分そういうのまでMVVMに落とそうとするのが過剰適応なんだと思うよ。 強いて言えばコンテンツ本体にあたるストリームなり、動画ファイルそのものやURI,またその選択に至るための検索要件とかがM,VMにあたんじゃまいか。 それによる選択イベントを受けて再生する何かをViewがごにょごにょすればいい。M,VMはそれが再生されてることすら知らんと。 動画周りの処理とかをごにょごにょやる必要あるときはその処理周りまでがM,VMに入ってくるんだろうね。 いずれにしろ枠にはめようとするのがおかしな元かと。
MVVMってどこまで使えばいいんだろうか ViewModel-Modelのデータ構造の二重持ち(とその同期のとり方)とか、 チェックロジックのViewModelとModelの二重持ちとか、 色々と実際に適用しようとすると頭の痛い所だらけで困る
94 :
デフォルトの名無しさん :2009/07/29(水) 23:58:04
ViewとModelのつなぎでしょ。 IValueConverterを実装したクラスがあれば、ViewModelなくてもいいと思ったりするけどね^^
データの二重持ちはしない方がいいでしょ。キャッシュ的なものはありかも試練けど。 チェックロジックの2重持ちも阿寒と思う。 Lazyとかつかえばうまくまとまりそうな気もする。
ターゲットによりけりだとは思うけど、ViewModelは編集中のデータを持っていて、 確定したらModelに書き戻す(キャンセルしたらロールバックする)って使い方が多いのでは? となると編集中の状態がある場合、データ自体は二重に存在する気が。 # IDataErrorInfoを使う場合は、大抵これに該当すると思うけど あとViewModelはModelに渡せないデータが渡された時に エラーを表示したりModelに渡さないようにするためにチェックするし、 Modelも当然チェックする。となると必然的に両方がチェックをすることになるのでは? 処理自体はModelに持たせてViewModelがModelに問い合わせるという手はあるだろうけど、 チェック自体はなくせないと思う。
チェックする内容がことなるんじゃね? 一緒なんだったらチェック内容もModelのメソッドとかにまとめるべきかと。
Viewが入力を受けたときにConverterで例外が発生しても、 ViewModelはそれを知ることはできないよね? 値変更時にそれを取り消せる「取消」ボタンを作ったけど、 ViewModelがView上の値の変更を知ることができず使い物にならなかったw。 Bindムズカシイ。
99 :
デフォルトの名無しさん :2009/07/31(金) 17:13:33
>>98 >Viewが入力を受けたときにConverterで例外が発生しても、
コンバータで想定外の型または値の場合は下記を返却するようにしてみては?
DependencyProperty.UnsetValue
>ViewModelがView上の値の変更を知ることができず使い物にならなかったw。
Binding ModeをTwoWayにしてる?
TabItemの背景色を変更するには、どうしたらよいのでしょうか Backgroundの値を変更しても変わらないのですが、これはどのバックグラウンドを変更しているのでしょうか
TabItemの背景色って、どの部分を指してるの? TabItem.Background変更したら普通にタブヘッダ部分の背景色変わったけど
102 :
デフォルトの名無しさん :2009/07/31(金) 20:28:01
WPFの場合はBackround値で変わるね。 Silverlightの場合は、Template内のRectangleのFill値を変更しないとダメぽいが。。
すみません、色は変更されていたみたいです・・ 変更した色が白っぽい色だったので違いに気がつきませんでした、本当にすみませんでした。 ところで、タブがアクティブになっているとき?のタブヘッダの背景色の変更はどうすればいいのでしょうか
TabItemのControlTemplateいじることになるかな TabItem ControlTemplate の例 を参考に
ありがとうございます やってみます
>>99 どもです。ちょっと手元に環境がないのですが
> コンバータで想定外の型または値の場合は下記を返却するようにしてみては?
なるほど。デフォルトコンバータ前提で考えてました。
自前でコンバータを作ってしまえば自由にできますね。
いっそViewModelのI/Fを例外が発生しないような型にしておいて、
ViewModelで変換までしてしまうという手もありかも。
> Binding ModeをTwoWayにしてる?
TextBoxに数値をBindしてMode未設定でしたが、これはデフォルトでTwoWayになっている気が。
View→Converter→ViewModel、のConverterの時点で例外が発生すると
ViewModelには全く処理が飛んでこないのでは?
デフォルトコンバータは、ViewとViewModelの整合が必要(=編集可能な値をBind)
かつConverterで例外が発生しうる状態では使えないか…うーん
107 :
102 :2009/08/01(土) 13:34:29
>>106 ViewModel側には例外を取得できないですね。そういった場合はView側で対処するのかも。
ValidationOnException=trueにすると、テキストボックス自体にはエラーになりますね。
(例)
<TextBox Margin="0" Text="{Binding Age,ValidatesOnExceptions=true}" />
アプリケーションの設定はProperties.Settings.Defaultを通じて読み込み/保存できるようですが 任意のパスから読み込みんだり保存するにはどうすればいいのでしょうか?
質問失礼します。 画面上のImageクラスに表示している画像データを Effectを利用して描画結果を変換したものを さらに画像データとして次のImageクラスに設定したいのですが この場合RenderTargetBitmapを利用するのがベストでしょうか? 何かほかに手段などはかんがえられますでしょうか?
MSDNのWPFフォーラムで聞いたほうが早いんじゃね? あそこ過疎ってんの?
>>109 Effectの適用タイミングがよく分からんが
次ImageのSourceに元ImageのSourceをバインドしてやりゃいいんじゃね?
>>110 実はLiveIDもっていませんので、ちょっと作ってみることにします。
>>111 エフェクトがかかった後の画像をもう片方のImageに貼り付けたいかんじです。
元ImageのSourceをそのまま設定してもエフェクト前の画像が表示されました。
<Image> <Image.Source> <DrawingImage> <DrawingImage.Drawing> <GeometryDrawing> <GeometryDrawing.Geometry> <RectangleGeometry/> </GeometryDrawing.Geometry> <GeometryDrawing.Brush> <VisualBrush> <VisualBrush.Visual> <Image> <Image.Effect> <BlurEffect/> こうするとか?w 一番直接的なのはEffectを自作してしまうこと 1パスで変換を済ませるピクセルシェーダを書けば一発
>>113 これをXaml上にかくのはご指摘のとおり直感的ではないですね。。
HLSLで簡単なエフェクトはかけるのですが
エフェクト変換後の画像データを
さらに別のエフェクト処理にかけたいとおもっています。
途中経過を画面でみれるようにしたいと思い質問しました。
Imageを使う必要はあるの? ImageでなくていいならFrameをネストすれば同じことできるけど
>>115 途中経過を見てみたいと思いましてImageにしたいなとおもっていました。
Frameについては今はじめてしったコンポーネントなので、調べてみたいと思います。
117 :
108 :2009/08/02(日) 02:22:08
>>108 自己レス
ApplicationSettingsBase.Providersが実際の読み書きしてるみたいだから
独自のSettingsProviderを登録すればできそう。
118 :
デフォルトの名無しさん :2009/08/02(日) 20:35:43
UserControlを作っていてわからないことがありましたので質問です。 方眼紙のような罫線を描くユーザコントロールを作成しております。 そこで、 <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> . . . <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid> のように、行・列の指定を記述出来るようにしたいと思っております。 もしよろしければ参考になるWebサイトやキーワードをお教えいただけますでしょうか・・・。 よろしくお願いします。
どうするも何も,自分でColumnDefinitionsのようなコレクションを持って自分でレイアウトするんだよ それと,UserControlでパネル作るのは無理でしょ カスタムコントロールだな
120 :
デフォルトの名無しさん :2009/08/02(日) 20:57:39
>方眼紙のような罫線を描くユーザコントロールを作成しております。 これが目的ではないでしょ? 具体的に書いてもらわんとわからんわ。
汎用的なコントロールを作ろうとしてるなら,UserControlは使えないというか作法として使わない
122 :
デフォルトの名無しさん :2009/08/02(日) 21:03:52
説明が下手で申し訳ないです。 >自分でColumnDefinitionsのようなコレクションを持って自分でレイアウト はい、現在はXAMLからはせっていできませんが、 現在は仮実装でですが、GridSheetColumnDefinition や、 GridSheetRowDefinition といったクラスの コレクションを、内部に作成しております。 これらの内容をC#記述したコードで適当に生成して、 罫線を引く所までは作成が進んでおります。 そこで、マークアップ拡張?というのでしょうか・・・ <GridSheet.ColumnDefinitions>というような記述で、 <GridSheet> <GridSheet.ColumnDefinitions> <GridSheetColumnDefinition/> . <GridSheetColumnDefinition/> </GridSheet.ColumnDefinitions> <GridSheet.RowDefinitions> <GridSheetRowDefinition/> . <GridSheetRowDefinition/> </GridSheet.RowDefinitions> </GridSheet> のように行・列の設定を行えたら良いなと持っております。
パブリックプロパティでIList(非ジェネリック)を実装したコレクションを公開するだけでよかったと思うけど
124 :
122 :2009/08/02(日) 21:25:04
125 :
デフォルトの名無しさん :2009/08/02(日) 22:47:12
GridのShowGridLines="True"で線引けるんだが、これでは不十分なのだろうか・・・
ScrollViewerにStackPanel入れて、StackPanelにImageいっぱいいれてもスクロールバーが出てこないんだけど どのプロパティを設定する必要があるんですか?
127 :
デフォルトの名無しさん :2009/08/05(水) 20:03:06
ImageのStrechがFillになってるとかじゃない?
ごめんなさい、ミスしてました ScrollViewerのHeightに値いれてるつもりが、NaN入れてました そこいじったら表示されました
画面遷移でこけてしまったので、回避の方法を教えてください。 WPFで場面ごとにPageを用意してタブコントロールで切り替えていたのですが、せっかくのWPFなのでアニメーションとか付けてみようと思い 透明度などをストーリーボードで制御してフェードイン・アウトを作ってみたのですが、タブキーで非表示(フェードアウトした)Pageのコントロールにフォーカスが当たってしまいます。 これを回避するために一つ一つにフォーカス制御のプログラムを組んだのですが、今後Pageが増える事を考えると効率的ではありません。 何かスパッと書けて効率のいい方法はないでしょうか?
・・・透明度0のあと非表示にとかしないの?
すいません、抜けてましたorz Visibilityプロパティもストーリーボードで透明度0にした後にFalseへ移るようにトリガで打ってあります。 ただ、このようにストーリやコントロールのテンプレートを用意しても、 コントロール側を制御するためのストーリーボードを用意する必要があるため複雑化は避けられません。 (プログラムでコントロール側のストーリーボードを作ればモジュール程度で収まるが折角のXAMLならXAMLだけで収めたい!(<x:Code>も避けたい)) WPFのサンプルが少なくこのようにしていいんだという自信がないため、 推奨される方法があるならそちらを優先した方がいいと考えています。 これはまだ.Net 3.5では実現できない話なのでしょうか?
ShaderEffectを通じてHLSLに2次元配列を入力するのってもしかしてできません?
WriteableBitmapとImageBrushを使ってブラシとして渡す
必要なら実装すればいい。
WPFってVSだけだと難しいのかな
んなこたない
凝ったデザインにしない限り、VSだけで十分
this.AddChild(new Button()); なぜこれでボタン表示できないのか分からない WinFormsと違いすぎる
サイズセットしないとだめなんじゃねーの?
WPFテクノロジーの発想ってMicrosoftのウリジナルなの?
HTMLが元祖です
>>142 マイクロソフトも含めて今のソフト業界にはオリジナルと言う物はない。
全ては過去の技術の焼き直し。
ソフトウエアなんて本質的にはなんの進歩もしとらんよ。
おとなのかいだんのぼる〜
>>145 こういうしたり顔してる奴って会社とかで何も役に立たないくせに人のやろうとしてることに文句付けて嫌われてるんだろうな
でも女性社員には人気あって、事務のかわいい新人のこといち早くやっちゃってたりするんだよね。
他人の話なんざ興味ねぇよ。 マ板か喪男板でやれ
NavigationService.Navigate() これやるとクリック音が出るんだけど消すことは出来ませんか?
人柱くんたちご苦労である。
152 :
デフォルトの名無しさん :2009/08/27(木) 16:53:36
Storyboard使ってみたいんだけど、どこから手を出せばいいのか分からない Blend無いと厳しいかな
Blendなくてもいけるけど、やっぱBlendで設定したほうが楽だな。 とりあえず単純なものなら、DoubleAnimationをやってみればいい。
ログオフ時などにApplication.SessionEndingでキャンセルしなければApplication.Exitが起きるとMSDNに書いてありますが 実際に試してみるとExitイベントが起きません。 private void Application_Exit(object sender, ExitEventArgs e) { using (StreamWriter w = new StreamWriter(path, true)) { w.WriteLine("Exit"); } } private void Application_SessionEnding(object sender, SessionEndingCancelEventArgs e) { using (StreamWriter w = new StreamWriter(path, true)) { w.WriteLine("SessionEnding : {0}", e.ReasonSessionEnding); } } ファイルには SessionEnding : Logoff しか書かれません。 何が原因なのでしょうか?
155 :
154 :2009/08/31(月) 20:24:11
Microsoft.Win32.SystemEvents.SessionEndedイベントで処理できました。 MSDNに書いてあることは何だったんだ…
てすと
Width="Auto"で伸びきるのが使いにくい コンテンツに合わせるのが筋じゃないのか
159 :
158 :2009/09/01(火) 01:25:03
なんか色々勘違いしたらしい。忘れてくれ
Stretchにしてるとかってオチではないよな
コンテンツのレイアウトは親に基づいて計算されるからな 考え方が逆
162 :
デフォルトの名無しさん :2009/09/01(火) 23:37:25
WPF標準UI初期値ださいんだよな。 理由はわかるけど、せめて初期テーマとかでWinForm並みにしてほしい。
標準で付いてるテーマでXPやVistaっぽくはできる
ListBox を使用して、下記のように ItemTemplate を設定しました。 <ListBox.ItemTemplate> <DataTemplate> <Border BorderThickness="1" BorderBrush="Black"> <TextBlock Text="{Binding Name}"></TextBlock> </Border> </DataTemplate> </ListBox.ItemTemplate> こうすると、Border が TextBlock の大きさになってしまうのですが Border の幅を ListBox いっぱいに広げたいのですが、 どうすれば良いでしょうか? ちなみにウィンドウの大きさをユーザーが調整できるように してあるので ListBox の幅は可変です。
165 :
158 :2009/09/03(木) 22:05:57
>>164 ListBox.HorizontalContentAlignment="Stretch"
名前欄消し忘れたorz
167 :
164 :2009/09/03(木) 22:11:37
ListView で Binding 表示する時、 ListView の選択アイテム削除ってどうやってマスカ? ListView / ListView.View / GridView とかやって GridViewColumn / @CellTemplate で ListView.Resource に定義した DataTemplate を指定。 テンプレート内 TextBlock / @Text に {Binding Path=myObj.member} とかで表示させてるのだけど, ListView.Items[n] とかやって取れるのは 自分で ListViwe に突っ込んだ型そのものだったりするんですヨ. while( listView.selectedIndex != -1 ){ listView.RemoveAt(listView.selectedIndex); } で、途中までは事たりてたんだけど、選択アイテムの中に非削除対象としたいアイテムがあった場合、 それを回避するには index 記憶したり更新したり、遠回りな実装しか思い浮かばなくて困ってマス.
何を言いたいのか分からないが、とりあえずお前が ItemsSourceとObservableCollectionを理解できないアホ子なのはよく分かった。
170 :
168 :2009/09/06(日) 23:56:23
とりあえず解決シマシタ (無限ループしそうデスガ...).
>>169 アドバイスありがとう. だけどよく分からなかった orz
.while (listView1.SelectedIndex > -1)
.{
. TestData td = listView1.Items[listView1.SelectedIndex] as TestData;
. if (td.removeOK != "yes")
. {
. ListViewItem lvi = listView1.ItemContainerGenerator.ContainerFromItem(td) as ListViewItem;
. if (lvi != null)
. {
. lvi.IsSelected = false;
. }
. continue;
. }
. listView1.Items.RemoveAt(listView1.SelectedIndex);
.}
MVVMすら理解していないな、こりゃ
半透明スッケスケのツールはもっと出回ってもいいと思う 2chブラウザとかIRCクライアントとか
中途半端に詳しい人って重いとか過剰に気にするから…
> 2chブラウザとかIRCクライアントとか この辺半透明でも、正直読みづらくなるだけで俺は嬉しくないんだが… 一般的にはそうでもないの? 非アクティブ時に半透明はちょっといいかもしれん
>>174 色次第だとは思う
背景が黒の50%で文字に100%のふちが付けばかなり見やすい
ビジュアルノベル風か
WPFではないけど、SSHクライアントPuTTYのxterm風透過やAero Glass効果のパッチとかはいいと思った。 (Aero GlassのほうはSS見ただけでまだ使っていないけど)
TextBlockにBitmapEffectを使うとTextにstring.Emptyが入らなくなる
TextBlockをFrameに入れてFrameにBitmapEffectを適用したら
で、結局WPFはLONGHORNの頃に自分達に驚きを与えたクールなブラットフォームになれたんですか?
WPF4.0でとりあえずある程度完成された形になるんじゃないかな
<RichTextBox.Background> <ImageBrush ImageSource="xxx.png" /> </RichTextBox.Background> このようにしてRichTextBoxに背景画像を表示しています ユーザーが好きな画像に変更できるようにしたいのですが、どのようにしたらよいかわからないので教えてください
185 :
デフォルトの名無しさん :2009/09/08(火) 20:34:31
>>183 見てきたけど、カッコいいね。
可視化することで、瞬時に状況把握ができる効果的な分野って結構あるんだろうなぁ
航空管制塔で使うようなソフトのところは、映画の一場面かと思った。
>>184 <ImageBrush x:Name="backgroundImageBrush" …
のように名前を付ければWinFormsと同じようにコードビハインドからアクセスできる
でもさ。アドベンチャーゲームのテキストたらたら表示と同じで メニューがいちいちアニメーションしたりするのって 忙しい時はウザいだけなんだよね。 おもちゃ用OSと仕事用OSとで分けてほしい。
そういう固定概念のおかげでGUIは進化しないんだろうね
でもVisual Studioのアニメーションは切ってるだろ?w
切ってねえなあ
固定概念な俺向けにマイクロソフトはちゃんとアニメーションを切れるモードを作ってくれているからな。 アニメーションするのがGUIの進化だと思うなら勝手にやっててくれ。
Officeのイルカが叩かれまくったのがいい経験になってるんじゃないか?
アニメーション自体は嫌いじゃないがVSのアニメーションはガクガクな上に時々変な表示になって気持ち悪いから切ってる 2010でWPFになったら改善されるんだろうけど
VS2010っていつ発売なんだろう
はるか昔にプレゼンで使われたVistaのコンセプト画像では ウィンドウが波打ったり回転したり自在にアニメーションしてたのに、 実際出来上がってみたら斜めに並べるだけでした。 なぜなら、テスターにキモいって言われまくったから。 そしてそこまでスリム化したフリップ3Dですら、 やっぱりいらないと言われる始末。
しょうじき、エクスポゼもすげーとか思うけど使いやすさから言うとAlt+Tabのほうがいい。 スノレパのエクスポゼ使った違う画面へのドラッグドロップはちょっと便利かと思ったけど。
そういえばiPodのCover Flowも全然使ってないな
アニメーション切るような奴はUIのこと何もわかってない
アニメーションには挫折した。 普通のUIを普通に使う。
切りたくなるようなアニメーションの使い方をする糞アプリがあるのも事実。 ピンポイントで使いこなせば強力だが、 下手糞が使うと邪魔だったりウザかったりクドかったり実に酷い物。
実は未だにCUIでテンキーといくつかのコマンドで操作できるようにしてくれと言う 案件があったりする
203 :
デフォルトの名無しさん :2009/09/09(水) 00:32:27
それはあるだろうね。なんでもかんでもアニメーションや視覚化は意味ないからね。 効率を求めるとCUIでテンキーとコマンドの選択肢は残るでしょう。
Window直下のCanvasパネルをTransformで移動・ズームさせてるんですが、 表示されてる領域の中心に現在位置している座標を求めるのはどうすればいいでしょうか。 中心じゃなくても左上の座標がわかればいいです。 マウスポインタだとGetPosition(canvas)で簡単に求められるんですけど。
もうアニメーションのためにプロパティ作ったり プログラム組むのはコードの難読化としか思えない
アニメーションとプログラムを分離できんのがWPFのメリットなんじゃねーか
WPFで作ったテキストボックスに入力値チェックを任せるのは問題ない? regexみたいに制限をかけたい。
Googleは正直嫌いなんだが、Chromeのタブ左右に動かすときの動きとかは好き。べつにChrome特有のもんじゃないけど。
>>208 WPF的には良くない
バインディングのValidationを使う
ChromeはWPFじゃないってのがすごいな。
.NETでUXをやる時の有力な選択肢がWPFってだけの話さ Googleみたいに巨大で体力のある企業なら、自社開発した方が自由にやれるしパフォーマンスUPにも繋がるだろう。
UXをやるってなんか変な使い方だな。
>>210 ありがとう!こういうのを知りたかった。
ちなみにWPFを勉強するお薦めを教えて欲しい。
Webでも書籍でもいいのでお願いします。
EssentialWPFはほどよい程度のレベルで網羅してるのでお勧め。 正直表紙とかで損してると思う。
>>215 確かに、あの 90 年代初頭っぽい CG の表紙は酷いな。
良著だけに、もう少し頑張って欲しかった。
>>214 書籍ではないが、CodePlex という MS 運営のコミュニティサイトから、
WPF 関連のプロジェクトをチェックする事をお勧めする。
自分の場合、MiniUML のソースが学習に役立っている。
>>217 ebook WPF
で検索すると幸せになれるかも
>>217 え。なにこれ。無料で落とせたんだけど。
よくわからんがthx。
pdf版は無料公開とか 海外は太っ腹だな
Expression Blend3たのしぃぃぃぃ
Expression Mediaはどこいっちゃったんだよーorz
223 :
デフォルトの名無しさん :2009/09/11(金) 01:58:56
はよExpressionの製品版出荷しろよな -> MS 11月らしいが初旬であってほしい。
Expression Blend Expressはでないのかのぉ
対応は .NET3.5SP1 なんだな。 .NET4.0が出たらSP追加で出すんだろう、たぶん。
226 :
デフォルトの名無しさん :2009/09/11(金) 10:32:07
VS2010がいつ頃出荷なんだろうか。 年末かなぁ
WPFで作った簡単なアプリをatom Z520 + US15WなUMPCで動かしてみたら、 表示にゴミが出まくったり、ウィンドウリサイズに3秒ぐらいかかったりで使い物にならなかった。 UMPCで動かせないって、将来大丈夫なんだろうか…
229 :
デフォルトの名無しさん :2009/09/12(土) 01:32:02
WPFってフルスペックPC向けでしょう。
今時のローエンドPCなら結構サクサク動くっしょ
そこでSilverlightのOutOfBrowserですよ。 多分これどこでも動かせるアプリケーションプラットフォームとして押してくるんだと思うよ。 WPFは同じ規約の高機能版って位置づけになるかと。
SilverlightのOutOfBrowserはIEコンポの中で動いてますw セキュリティ制限もそのまま
HTA から JavaScript 経由でローカルアクセスとかできないの?
まさかXP上で動かしてるんじゃないんだろうなw
MVVMってVSのWPFテンプレートとは構造が違うよね? じゃあWPFテンプレートはどういうパターンに則ってるんだろう
> MVVMってVSのWPFテンプレートとは構造が違うよね? え?
ちょっと上にVisual Studioのアニメーション切っているって話があったけど、 一通り探してみてもどこで設定できるかわかりませんでした。。 よかったら教えてください。
VSのWPFテンプレートには全くフレームワーク色がないだろ
どうとでも使える
>>237 ツール→オプション→環境ツールをアニメーションで表示
>>238 でもMVVMに則ってやろうとすると手を加えないといけないよね。
WPFはMVVMと相性が良いっていうけど、それならなんでMVVMパターンのテンプレートにしないんだろう。
ある程度WPFに慣れた人向けってことなんかな。
ゲームとかちょっとした小さいツールとか作るのにMVVMなんかいらないだろ MVVM使うようなある程度の規模のプロジェクトだったら どっちみち自分で枠組み作るんだからテンプレートなんかあってもなくても変わらん
テンプレートを用意すると、押し付けになっちゃうからね。 MVVMはあくまで技法のひとつだから。
<StackPanel DockPanel.Dock="Left" Width="100"> <TextBlock> <TextBlock.BitmapEffect> <BevelBitmapEffect></BevelBitmapEffect> </TextBlock.BitmapEffect> ABC </TextBlock> </StackPanel> BevelBitmapEffect つけても外見がまったく かわらないんだけど、どこが悪いんでしょうか?
TextBlockに使うのが悪い
WPFToolkit の DataGrid についての質問です。 DataTemplate を使用してカラムヘッダに Grid を入れたんですが、サイズが小さいです。 カラムヘッダいっぱいにGridを表示したいと思います。 たぶん、DataGridColumnHeader の HorizontalContentAlignment
245 :
244 :2009/09/13(日) 23:53:11
すいません、途中で書きこんでしまいました。 DataGridColumnHeader の HorizontalContentAlignment を Stretch にすればいけるような気がするんですが、DataGridColumnHeader に アクセスする方法がわかりません。 どなたか解決策をご存じの方いらっしゃいませんか?
>>239 その手法が喧伝されはじめたのが最近だから。
もともと(xamlの内部にしかもわかりにくい書式でバインド云々とか)
WPFの元設計がいまいちだとしか思えないわけで、
WPF2では(なんてものを出す気があるのなら)、それに近い構造をデフォルト様式の一つに持ってくるわけだろう。
そして、そのようにシステムレベルで構造拡張するなら、
MVVM(自体も必ずしも簡潔明快なものではないわけで)の露骨なテンプレみたいにせずとも、
前に似た話が出ていたが、VM部分が、簡単なV-M対照表的なものでいいのでないか。
たとえば、バインド定義ファイル?というような名前のものに
[(ザムルの) myText1 = (コードの)myClass1.value1 ]
などと書いておけば、最も初歩的にはそれでOK、簡単なソフトならそれで動く。
そして詳細の設定や制限や、表示やバインドの切り替えやちょっとしたイベント処理等も、複雑なことをやる場合のために、その定義表内で可能な限り出来るようにする。
ザムルは表示のデザインだけ、コードはデータの保持と計算と出力物の作成だけと。
WPF使ってワープロみたいな物作るとしたらどの辺のクラスを使うんでしょうか… フォームズでのMeasureStringのような物ってあります?
WPFにはとっても複雑で高レベルなテキストレイアウトの仕組みがある MSDN読んでると頭痛くなってくるから頑張れ
251 :
248 :2009/09/14(月) 21:48:53
んーレイアウトとかはFlowDocumentとかその他のレイアウトの仕組みがてんこ盛りありそうなんですが、 Graphics.MeasureCharacterRangesみたいなのとかプリミティブに操作出来るものがないと何処かで行き詰まる気が。 とりあえずMSDNいってみまふ・・・
LineってCanvas上じゃないと表示できないの? StackPanelに入れたいんだけど表示されない
普通に表示されるけど Lineって本当にお絵かきするためのコントロールなので区切り線にはSeparatorを使う
パスの間違いだろ <StackPanel Margin="72,112,184,131"> <Path Fill="#FFFFFFFF" Stretch="Fill" Stroke="#FF000000" Width="217" Height="81" Data="M96,56 L312,136"/> </StackPanel>
TabItemのタブをホイールクリックしたというイベントを拾いたい場合 自分でMouseDownやMouseUpイベントを処理するしかないんでしょうか?
257 :
256 :2009/09/15(火) 16:40:06
>>256 補足
やりたい事は、IE8等のタブブラウザによくあるような「タブをホイールクリックすると閉じる」
という動作です。
>>256 まあClickイベントが無い以上は、そうなるわな。あと、MouseLeaveイベントも拾っとかないと
いかんのでは。
ただ、IEブラウザの例ではクリックでタブを閉じてるのはなくて
MouseDownされた時点で閉じているようだが?
259 :
256 :2009/09/16(水) 13:54:03
おお。質問を受けて、私もカスタムビヘイビアを作ろうかと検討していた所だった。 使わせてもらいます。
WPFではNameはキャメルじゃないの?
>>261 Nameのお作法はよく分からん。俺は小文字スタートキャメルだけど、
標準コントロールをみてみたらキャメルにしていなかった気がする。
>>262 Flash&ActiveScript? スレ違い?
WPFならRenderTransform使うけど
ActiveScript?
>>264 うん、RenderTransform使うんだけど、TranslateTransformとRotateTransform
をそれぞれどの要素に適用したらいいかなと悩んでるの。
一つの要素に両方適用すりゃいいじゃん
>>267 それだとうまくいかないんだよな。
Translateしても原点は相変わらず左上。
画像に対して適用してもその画像の持つ論理座標上での位置は変わらんみたいなんで。
>>268 俺もそういった座標系でこけたことある。
結局中心点とかコントロールだけで取ること出来なかったしグリッドに貼って
中心点をプロパティ化してバインドした
好きな座標を中心に回転… RotateTransformのCenterX/CenterY、じゃないんだろうなぁ、そんなに悩んでるんだから
最悪MatrixTransformでどうとでもなるけど
>>270 ScaleTransformとかと組み合わせたくなったとき
Centerプロパティは役に立たないんだ。
>>271 この際アフィン変換について学んでみるかなあ…
>>269 よかったら詳しく教えて
RotateTransformやった後にScaleTransformをやるんじゃだめなんか?
別に勉強するほどのことでもないよ Matrix m = Matrix.Identity; m.RotateAt(r, cx, cy); m.Scale(sx, sy); みたいなかんじ
XAMLのBindingは同じxaml内のElementとしか直接的にBindingできないの? foo.xamlのElement1とbar.xamlのElement2はBindingできない?
Image Sourceに外部イメージファイルを指定できないのは何故? MediaElement Sourceでは出来るのに 出来るか出来ないか統一してくれないと分かりにくい
なんでWPFアプリケーションって見た目Classicになるん? VisualStyleすら適用できないとかどんだけwww
自分のWPFアプリはXP動作保証外って書いちゃったなあ
>>280 違うデスクトップテーマを強制適用させると起動直後に死ぬらしい。
もう死ねばいい。
VS2008SP1当ててないからか?
テーマで思い出したけど、System.Windows 名前空間の MessaeBox が クラシックになったり、Microsoft.Win32 名前空間の OpenFileDialog が Vista 上で XP 風になるのが嫌だな。 仕方ないから System.Windows.Forms 名前空間のものを使用してるけど、 こういう標準ダイアログ系は Microsoft に頑張って欲しいな。
WPF Themes 使うとか。 まあ、もちろんコモンダイアログ系は適応できないけどね。
本来WPFの守備範囲外だからなあ 文句があるならWPFベースで自作しろってことなんだろう
>>285 WPF Themesいいよね。
でも、添付されているテーマが20くらいあるけど、テーマによって適用できるのと適用できないものがあるからなぁ。
Rectangleが消えちゃったり、グルーピング表示させたときのグループヘッダーが消えちゃったりと。
まあそこんところは自分でXAMLを修正すればいいんだけど。
パネル系とかから出し入れするとHeightが復活してくるのが面倒だ
TextBlock 内の文字をリサイズに合わせて、 TextBlock いっぱいに表示したいのですが どうすればよろしいでしょうか?
Viewbox
レイアウトの状態をまるまる保存して後で復元するため WindowのContentをXamlWriterで書き出しました。 しかし、"{Binding Hoge}"のような所がBinding後の実際の値になって書き出されてました。 Binding構文を失わずに書き出す方法はありませんか?
.Net Freamwork 4.0じゃRibbonは使えないの?
>>293 落としてみたら3.5だった。
4.0用はないみたいだ
Ribbonは使用条件が違うからね
WPFの作法が良く分からない。 たとえばガントチャートコントロールみたいなのを作ろうとした時は Controlのサブクラスを作成してそのOnRenderでDrawingContextから描画すれば良いの?
アマゾンで入門本をいくつかかいなよ。
いくつか本は立ち読みしたんだけど、完全オーナードローのカスタムコントロールについて記述されている本が見つからないんだよ。 逆にあったら教えて欲しい。
立ち読みしないで買ってね。
C#を排除したXAML専門のサイト無いんですか? 公式にもWPFフォーラムしかありません
Canvas内にLineかRectで書けば?
>>298 .NETのソースコード読めばいいじゃん
WPFは全部公開されてるよ
>>304 のツール使えばExpressでもソースGetできるみたいだな
ん?powershellで動くの?
ステップインするための設定おしえて><
ググれカス
310 :
デフォルトの名無しさん :2009/09/27(日) 15:10:29
なんだよ.NETソース公開されていたんか。 いままでMonoのソースとか見て参考にしていたよ。 クラスファイルごとに1個ずつダウンロードされるから時間かかるなw 細かい話だがプライベート変数のプレフィックスとか統一されていないんだね。
オフィシャルなNumericUpDownが欲しい WPF Toolkitに入れるように誰か要望してくれないかなあ
RadioButtonのVerticalContentAlignmentをBottomに設定しても、 Contentにあたる部分しかBottomにならず、◎の部分がTop固定のままで使いにくい ◎ Content ↓ ◎ Content
RadioButton自体をBottomに配置するという考えは思い付かんか
出来る出来ないの話ではありません
Vertical"Content"AlignmentなんだからContent部分だけ配置が変わるのは当たり前だろう
「使いにくい」という意見に大しての答えが↑ これがPG脳ですか。
「使いにくい」という感想だけなら「ふーん」で終わる話なんだが どうして欲しいか書いてないんだから、上のようなレス貰って文句言うのは筋違い。
「Content」を理解していていればそれは自然な挙動だが、 それを理解していないからこの挙動を理解できないだけ。
試しにボタンの位置が常にCenterになるようControlTemplate書いてみたら10行くらいで書けた。 WPFの柔軟性とXAMLは恐ろしい子だな。
Contentを理解していることを前提に、Contentに◎が含まれない、つまり◎をContentとして扱っていないというのが不便ではないかと言っているのですが
322 :
訂正 :2009/09/27(日) 21:37:30
×扱っていない ◎扱えない
俺は不便に感じない。 ◎をContentとして扱いたければ、Contentが空のRadioButtonとTextBlockなりを Gridとかで並べればいいだけだし。
あ、StackPanelの方がいいかな。
◎をContentとして扱いたくない状況が分からない ずれてる方がクールとかあるんですか?
もうどうでもよくなったかも知れんけど、ラジオボタンはスタイルをほぐせば二重丸の部分が別で考えられているのがわかるぞ <ControlTemplate TargetType="{x:Type RadioButton}"> <BulletDecorator Background="Transparent"> <BulletDecorator.Bullet> <Microsoft_Windows_Themes:BulletChrome Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" IsChecked="{TemplateBinding IsChecked}" IsRound="true" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}"/> </BulletDecorator.Bullet> <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/> </BulletDecorator> <ControlTemplate.Triggers> *** </ControlTemplate.Triggers> </ControlTemplate> 今となってはどうでもいいことかもねごめんね
>>326 ↑こういうのがPG脳と言って、開発現場では嫌われていますww
>>327 Control templateの中身を確かめるくらいで嫌ってしまうような現場は、
そもそもWPFに手を出せないから心配しなくてもいい。
>>320 見た目の問題なら大概は XAML だけで片が付くね。
コードビハインド書いたら負け、みたいな感じ。
確認だけどこの流れは
>>326 がマズイってことになってる?
>>304 のツールでちゃんとソース落とせる?
netmassdownloader -d C:\Windows\Microsoft.NET\Framework64\v3.5 -output E:\ReferenceSource
てな感じでやっても見つからんみたいで落とせん。
C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client を指定したら全部じゃないけどダウンロードできたわ ただ単にMSのサーバーに残ってなかっただけか。失礼
〃〃∩ _, ,_ ⊂⌒( `Д´) < ヤダヤダ!RadioButtonが俺の思った通りの仕様じゃないのは嫌だ! `ヽ_つ ⊂ノ _, ,_ (`Д´ ∩ < ヤダヤダ!反論なんて嫌だ!反論する奴は全員PG脳だ! ⊂ ( 俺の思った通りじゃないのは嫌だ! ヽ∩ つ ジタバタ 〃〃 ∩ ∧ ∧ ⊂⌒( _, ,_) `ヽ_つ ⊂ノ グスッ・・・ (ヨ 〃〃∩ _, ,_ ノノ キィィィ ヤダヤダヤダヤダヤダヤダ!! PG脳は ⊂⌒(#`Д´)illi < ヤダヤダヤダヤダヤダヤダ!! 現場で嫌われる!! `ヽ_つ⌒ヽ(ヨ) ( ヤダヤダヤダヤダヤダヤダ!! 嫌われる!!嫌われる!! ⌒Y⌒ ドンドン
コントロールの位置合わせにPanelとか色々あるけど結局Gridだらけになった
Gridは万能だということらしいからな。
StackPanelは使うだろ
GridのRowとかColumnが超便利だということに最近気づいた
おせーよw
StackPanel、使い方次第で凄い面白いよ
>>343 マウスが来るとでかくなるMac見たいなUI見たときちょっと「おっ」っておもった
>>344 うんうん、まさにそういう使い方をしておるよ
無名なTwitterクライアントだがね
WPFで作ったTwitterクライアントあんのか ちょっと欲しいぜ 自分で作るのはめんどい
>>346 結構沢山あるよ。
国産のは実験で作ってる系の軽めなのが多い。
海外製のはいかにもWPFって感じにかなり多機能(悪く言えばゴテゴテ)なのが幾つか。
<TextBlock>あい</TextBlock> 「あ」だけ色を変えたいのですが、 <TextBlock 赤>あ</TextBlock><TextBlock 青>い</TextBlock> みたいに独立させなきゃいけないのでしょうか
TextBlockなら中にSpanとか使える
Spanって便利そうですね ありがとうございます
DPIで表示の大きさ変わるのってどうなんだろ 良いことなのかよくわからない
携帯とか dpi が明らかに違うだろ そういう場合でも絶対サイズ(2cmとか)で表示できるのは いいことじゃないの?
wpfはdpiを96と規定してるんだっけ。 じゃあそれだとモニタによって絶対サイズ変わっちゃうよね。 俺のモニタは約86dpiだから見た目はちょっと大きくなっちゃうはず。
モニタによってサイズを変えたくないからこその96固定だろう?
>>353 その86dpiのモニタを使っていても、どうせWindowsのDPIの設定は96なんだろ。
だから、お前のPCでWPFアプリだけ少し大きく描画されるなんてことにはならない。
画像ぼやける
357 :
353 :2009/10/04(日) 13:31:41
うーん、わからん。 例えば12ptのフォントを表示させたとして、WinのDPIは96だから (12 / 72) * 96 = 16pxの大きさで表示される。 んで、俺のモニタは86dpiだから 16 / 86 ≒ 0.186in モニタによってドットピッチはさまざまだから、絶対的な大きさは変わってしまう。 それとも、そういうことじゃなくて12ptは必ず16pxの長さになる(Windows上では)ってことが狙いなの? サイズを変えたくないってのはピクセル単位の話なのか
物理的な大きさ云々と言うより、 GDI使うアプリでは、WindowsのDPIの設定を標準の96から変更すると描画が崩れるものが多かったから、 WPFアプリでは何も考えず96 DPIのつもりで取り扱えるようにしようという程度のことだと考えておけばいいと思う。
>>357 正反対。絶対サイズでいえば 12pt / 72 = 0.166in で計算は終わり。これがWPFでのサイズ。
px換算だと、(12/72) * 86 = 14.33px(ハードウェアピクセル)
デバイス非依存ピクセル(DIP)では、 (12/72) * 96 = 16DIP。これは絶対的なサイズ。
公式に書いてあるんだから読んで。
http://msdn.microsoft.com/ja-jp/library/ms744952 (VS.80).aspx
Windows Presentation Foundation と Windows フォームのレイアウトの違い
WPF は、解像度に依存しないレイアウトを使用します。
すべての WPF レイアウトのサイズは、デバイス非依存ピクセルを使用して指定されます。
デバイス非依存ピクセルのサイズは 1/96 インチで、解像度に依存しないため、
出力先が 72 dpi モニタであっても 19,200 dpi プリンタであっても、同様の結果を得ることができます。
出力デバイスが 96 dpi で、WindowsFormsHost 要素にスケーリングが適用されていない場合、
1 デバイス非依存ピクセルは 1 ハードウェア ピクセルと等しくなります。
拡大して同じだけ場所とるならユーザーからしたら何のために解像度大きくしたか分からんよな
361 :
353 :2009/10/04(日) 21:58:21
>>359 >出力先が 72 dpi モニタであっても 19,200 dpi プリンタであっても、同様の結果を得ることができます。
これはつまり定規で測れば同じ大きさを示すってこと?
Windowsはこちらが教えなくても出力先のモニタやプリンタのDPI値を知ってるのか。
モニタやプリンタが教えてくれるだろ。
今度、Blend 2でWpfControlLibraryからコントロールを作ろうと思うんだけど Expanderのように内部にグリッドを持つことができるようなコントロールを作るためにはどんな技術が必要になるのか教えてほしい 結構頑張っているものの一向にうまくいく気配がないorz 何かそのような名称でもいいんで情報がほしい
ContentControlから派生する。 ControlTemplateには必ずContentPresenter要素を含める。 すると,XAMLでダイレクトコンテンツとして指定した要素が自動的にその場所に表示される。
>>364 ありがとう!
まだうまく再現出来ていないけどなんとかしてみる!b
>>363 Blend だけでやろうとしてない?
Visual Studio を使わないと新しいロジックやプロパティを持ったコントロールを作成するのは無理だと思う。
単に外見やアニメーションを変更したいだけなら、コントロールを作成するんじゃなくて、
スタイルを使って、コントロールのテンプレートを置き換えるだけで済むんだけど。
一応VS2008Pro,C#+Blend 2で頑張ってます。 簡単なプロパティ作ってDependencyPropertyうんぬんはできているので、あとはそのContentPresenterぐらいかなと考えてます いまだ苦戦してるけど近づいた感じもする
カスタムコントロール作るのって結構難しいよ 何も考えずに作るとテンプレートに対する制約が増えすぎて テンプレートを差し替えられないない使い物にならないコントロールができる
元のコンポーネントを拡張するだけなら簡単じゃない?
staticpanelを使うのがまずいのか、簡単に上から「ボタン、テキスト、ContentPresenter」ときているのに コントロールにコンテンツを突っ込むとボタン、テキストが消えて追加したコントロールのみになるw Contentpresenterを使うコントロールの作成は前にもどこかで見て訓練したんだけど、まったく覚えていない・・・。 なにか星の形のボタン作って、Contentプロパティはこいつをつかうんだぜ!みたいなことで説明していたとおもうんだけど、 そんなことだけ覚えていて、感じの記述を覚えてない。 理想では自由自在にカスタムコントロールさえ作れれば、ExpanderをもっとWPFらしいコントロールが作れれるなぁといった安易な発想なんだけど、 保守に疲れてしまうならいっそのことテンプレートで作ったほうがいいのかな・・・ でもやっぱ自作コントロールでDLL配布できればかっこいいねっ! 作れればかっこいいね・・・。
なんとか理想の動きをするようになったので報告 ContentControlから派生するということだったのでそのままContentControlを<ContentControl>***</ContentControl>としていたのですが、 この部分をStackPanelに変えることでカスタムコントロールにコンテナとしての機能を取り付けることに成功。 <StackPanel> ****略**** <Grid x:Name="LayoutRoot"> <StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" > <TextBlock Text="{Binding Path=textcontent, ElementName=UserControl, Mode=Default}" TextWrapping="Wrap"/> <Button Content="Button"/> </StackPanel> </Grid> </StackPanel> <Window x:Class="WpfApplication1.Window1" Title="Window1" Height="300" Width="300"> <Grid> <temp:UserControl1 textcontent="unko"> <Button Content="うんこ" /> </temp:UserControl1> </Grid> </Window>
ObservableCollection<T>とBindingList<T>の使い分けって、 シンプルかつ自分で拡張の前者、多機能な後者という認識でいいんでしょうか? 並び替え等を行わないので前者でいこうかと思うのですが、注意点があればお願いします。
<TextBlock Text="{Binding Duration,StringFormat=hh:mm:ss}"></TextBlock> TimeSpan をバインディングしたんだけど、StringFormat が有効にならない。 使い方間違ってる、俺?
TimeSpanはIFormattableじゃないからなぁ
Bindingの書き方はいまだに理解してない。 StringFormat=T でやってみて?
376 :
375 :2009/10/06(火) 16:34:52
ごめん無視して。
まあ、Converter使えってことだな
378 :
373 :2009/10/06(火) 17:05:05
はやいレスありがとう。 ヘルプ見てみたら DateTime は IFormattable だけど、 TimeSpan は違うんだね。勉強になりました。
<Hyperlink Name="hyperlink1">Hello</Hyperlink> このHelloをコードビハインドで取得するにはどうすればいいですか? <Hyperlink Name="hyperlink1"><TextBlock Name="textBlock1">Hello</TextBlock></Hyperlink> これでtextBlock1.Textから取得できましたがTextBlockを省きたいです
実際はこのようになっています <TextBlock><Hyperlink Name="hyperlink1"><TextBlock Name="textBlock1">Hello</TextBlock></Hyperlink> WPF!</TextBlock>
HyperlinkのInlinesの中にRunが入ってるからそのTextを見る
難しいので諦めます ありがとうございました
120dpiでFrameの中のPageのギリギリ端にBorderなどで枠を表示させると両サイドだけ切れる 96dpiだと切れない 何故このような差があるの?
たまたまじゃないかな? 作画するときスムーズに見せる機能(フォントとかに使われている奴)が効いてるため見た目でちょっとした誤差がでる
今ちょっとD&Dの勉強してるんだけども Thumbの外見をビハインドで変えるにはどうしたらいいですか? Adornerはめんどくさいんであまり使いたくないのです やりたいことは右ペインにサムネ一覧出して、そこからD&Dで中央ペインの特定の場所に貼り付けたい その場所の当たり付けるのに半透明にしたサムネをドラッグしたいのです サムネ自体はVisualBrush付けたRectangleで、生の画像ではありません よろしくお願いします
XAMLで定義したResourceDictionaryをC#側から触るにはどうしたらいいんだ?
Application.Current.Resourcesじゃだめだっけ?
>>387 やってみたけど中身0だった
別にエラーは出てないんだよなあ
>>387 そんなはずは・・
AppクラスのXAMLに定義したresourceなら
Appクラスのoverride protected OnStartupで
object o = this.Resources["key"];とする。
WindowクラスのXAMLに定義したresourceなら
コンストラクタのInitializeComponent();のあとに
object o = this.Resources["key"];
これで確認できるはずだよ。
VistaからはPresentationFont.exeみたいな名前のプロセスがデフォで起動時に立ち上がるのでしょうか? XPだと初めのWPFアプリが起動されないと開始されません
>>389 ・・・あーいや
追加→リソースディクショナリで別ファイルになってる奴なんだ
だからか?>中身空
>>391 あーそうか。MergedDictionariesでResourceを追加してるわけね。
なら、
該当するDictionaryがMergedDictionariesの0番目に追加されてるとして
object o = this.Resources.MergedDictionaries[0]["key"];
これで取得できるはず。
DictionaryをMergeしても直接コレクションアイテムが、Merge先のDictionary(この場合this.Resources)に
一個一個追加されるわけじゃない。
>>390 .NET Framework 3.0以上の入った環境では、
Windows Presentation Foundation Font Cacheというサービスがある。
そのプロセスの正体はこれだろう。
お前のVistaパソコンで起動時にこれが立ち上がるのは、
このサービスがスタートアップ: 自動になっているか、
PC起動時に実行されるアプリの中にWPFアプリが存在するかのどっちかだと思う。
>>392 うーん
それでもResources.MergedDictionariesのCountが0なんだ
これはもしかしたら、そもそもリソースの書き方に問題あるかも知れない
ちょっと適当なコントロールにくっつけて有効かどうか試してみる
最近LAN接続のとある計測器の計測結果/経過をリアルタイムに表示するソフトをWPFを用いて作っています。 ソフトウェアの役割は 1.機器に対して1ms程度間隔でとあるデータを送信する。 2.1ms程度間隔で機器からデータを取得する。 3.2のデータをユーザーに向けて表示する。 参考までに申し上げますと、 開発対象はあくまで計測機器であり、ソフトウェアは単なる治具でありWPFを使っているのはあくまで趣味的な問題で WPF的にスマートなやり方で実装したいな、と思っております。 1,2の機能はUIスレッドとは別スレッドとして1msスリープで定期的に動いています。 1のスレッドをthreadT 2のスレッドをthreadR とします。 そしてUIスレッドを含めたすべてのスレッドがあるオブジェクト(ObjA)のプロパティの読み書きを行います。 ObjAは表示用の各UIElemntのDataContextとして設定してあり、ObjAのプロパティはすべてDependencyPropertyとなっております。 ObjAの所有スレッドはUIスレッドであるため、threadT,threadRはプロパティを読み書きする場合には、Invoke,BeginInvokeを用いてアクセスします。
396 :
395 :2009/10/10(土) 23:00:19
作ってみて気づいたのですが、結構遅いのです。 まず、threadTがObjAから取得する際にInvokeにてGetValueしておりそこでUIスレッドの都合によって待たされる。 threadRからのObjAプロパティに対する書き込みは、BeginInvokeにで非同期で書きこむため、そうでもないのかな、と思ってはいます。 厳密に計測しては無いですが。 で、今回の問題点は上に書いたとおり ・threadTから送信されるデータが遅い、それは、ObjAからいちいちInvoke(GetValue())で取得しているから、だと思われる。 というところです。 これを解決するには、 ・わざわざDependencyPropertyなど使わずに通常Propertyを用いて、バインディングさせておいて、 表示を更新したい場合にINotifyPropertyChangedを通じて通知する。 ・表示用途のバインディング対象とは別に高速で原始的なオブジェクトをthreadRが参照するようにして 表示させたいタイミング(たとえば60fps程度)でUIにバインディングされているオブジェクトを更新する。 などというやり方も考えられるかと思うのですが、WPF的なフレームワーク(主にDependencyPropertyとバインディング)を用いて実装したいなと思っており、 他に粋で効率の良い方法はないかなと思い書き込ませていただきました。 皆さんは大量である程度リアルタイム性の必要なデータをUIにバインディングする際などはどのようなやり方で実現されているのでしょうか? よろしくお願いします。
マルチスレッドの設計がひどすぎる上に その周期でC#/WPFを選択している時点で論外だと思うが まぁ、好きでやっているなら好きにやれ
バインディングなんていうのは「枠にはまれば便利」なものであってだな そんな特殊な用途をいちいち想定して作ってるわけがないだろ
WPF以前の問題として 1msのsleepってWindowsでは実現できないじゃなかったかな? Sleep(1)としても、実際はどうしても15msほどSleepしてしまうと私は記憶しているが。 >1,2の機能はUIスレッドとは別スレッドとして1msスリープで定期的に動いています。 これは本当に実現できているのかまず確認してみては?
1msじゃまわらないね。 俺も15msくらいという記述を昔に見たことがあるが、今探してもないな。 Forms.Timerが55ミリ秒とはかいてあるが。
timeBeginPeriod(1)からtimeEndPeriod(1)するまでの間は、Sleepも精度が上がるから、 一応1ミリ秒のスリープも実現不可能ではないはず。 もっとも、それやったところで、396の問題解決には程遠いだろうけど。
StopWatchが結構な精度持ってなかったっけ? でもそもそもWindowsのコンテクストスイッチ間隔が20msとかそんなんだから、 デバイスからの割り込みなくてポーリングで1msの分解能を得ることは無理だな タイマ割り込み使うなら.NETでコーディングは出来んし
コマンドレスポンスだけの計測を送受信別スレッドにしている時点でもうだめ
流石にコマンドレスポンスのテストじゃないと思うが
レスポンスタイムではなくプロトコルの話だと思う
自作アプリを GPL v2 で公開しようと思ってます。 そのソフトのなかで、マイクロソフトの M-V-VM サンプルについている DelegateCommand と ViewModelBase を使用しています。 GPL とリンクするモジュールは GPL でないと まずいと思っています。 そこで、GPL または 修正BSD ライセンスな、 DelegateCommand と ViewModelBase は どこかにないでしょうか?
Ms-PLにしろ 感染性はあるけど遥かに利用しやすい
MS製mscorlib他を使う限りはGPLは適用できないような気がするんだが……
OSの一部みたいなもんだから例外条項適用ってことでいいんじゃない? 再配布パッケージを付けたりしたら違反になると思う
TextBlockの自動リサイズってVisualBrush以外の選択肢はないのだろうか 遅いと書いてはあったけどここまで遅いとは
.NETでGPLなんか使い物にならないだろ
>>406 と同じ悩みを利用者みんなが抱えることになるんだから
>>410 サイズを明示的に指定せずにStackPanelなどに入れとけば勝手にリサイズしてくれると思うけど
どこからVisualBrushが出てくるのかわからない
412 :
406 :2009/10/11(日) 20:08:26
Ms-PL ってソース非公開で商用利用可能でしょ? 自分のコードがソース非公開で商用利用されるのはいやなので (自意識過剰とは言わないで)、GPL にしたかったんだけど・・・。 Ms-PL には感染性があるんで、この「このプロジェクトは絶対に オープンソースで」というと、オブジェクト形式での配布を認める Ms-PL に抵触してると解釈される? それとも、ソースを公開・非公開にするかについて規定のない
(途中での書き込みすまん) ソースを公開・非公開にするかについて規定がないから 抵触しないとみなせるの? その辺がわからないんだよー。
ライセンススレでやれ
>>411 今ちょっとAA管理プログラム作ってて、大きさバラバラなTextBlockを一律64x64のサムネイル表示させてるのよ
いちいちスケール計算するのもなんだからVisualBrush
でもこれだと場合によっては表示されるまで10秒くらいかかる
コレクションバインドだと順次出すことも大変みたいだし困ってる
じゃあRenderTargetBitmapでキャッシュ WPFだからこそVisualBrushみたいな便利なものが使えるけど 一般的にはそういうアプローチを採るのが普通じゃないの
>>416 やっぱそうか
GPU支援に期待し杉たかね
いやGPU支援以前にVisualBrushがTextBlockを更新させてるせいだと思う
WPFの最新開発環境整えるのにいくらかかるんだ?
「最新の」なら0円だろ 「最高の」なら話は別だが
421 :
デフォルトの名無しさん :2009/10/13(火) 10:04:40
コントロールを描画するのに必要なパラメータとして、依存関係プロパティ A,B,C があります。 A,B,Cの内どれかが変更されたら、それを元にコントロールの内容も更新に反映させたいのですが A だけ変わってB,Cはそのままの場合や、A,B,C全部が変更される場合もあります。 更新回数を最低限にしたいのですが、こういう場合、描画のトリガーとしてどういう方法を用いるのが 理に適っているんでしょうか?
必要なときにUpdateメソッドでも自力で呼んでやるのがいいんじゃね?
普通に描画を無効にすれば、適当なタイミングで勝手に再描画してくれるでしょ
424 :
353 :2009/10/13(火) 17:32:42
アプリ起動時には無い、あとから動的に追加した要素のアニメーションをXAMLで記述することってできますか? やはりコードで記述するしかないんでしょうか。方法あればヒントだけでもいいので教えてください
レス番消すの忘れてた恥ずかしい
リソースとして記述しとくぐらいはできると思うが
うろ覚えでXAMLReaderとかなんとか言うのを見た気がする XAMLファイル生成して後から読むとか出来るかも知れない
ファイル生成しなくてもXamlReaderならStringから直接読める でも動的に生成したXAMLを読むとかでなければリソースに書いとくのがベター
なるほど、通常はリソースで、 生成したXAMLを読み込む場合はXamlReaderですね。どうも
プログラムのスキンをXAMLで書かせるってのはあり?
スキンの作成者に.NETやWPFについての知識を要求してもいいなら。 VS2010はXAMLでカスタマイズできるみたいだけど,そもそも開発者のためのツールだから話が別。
新しいスキン、ニュースキン
不親切だよね
叩き台のXAMLを用意しとけば画像変えたりボタンの位置やサイズ変えたりくらいは 開発者でなくてもできるだろうけど,もっと弄りたかったら自分でMSDN読めというのはちょっとなあ
どこまで自由度の高いスキンにするかに依存すると思う。 画像変えたりボタンちょろっと弄ったりする程度ならXAMLを弄らせる必要はないけど もっと弄って根本からUI変更したいならXAML弄らせるのが一番だろう。 どこまでやるかによるけど、専用のUIマークアップ言語用意するのって結構手間かかるからねぇ
つWPF Themes
RichTextBoxでMS Pゴシック指定しても等幅表示されてるぽいのはなんでだ?
むしろいまだに等幅がデフォじゃないのにイラつく
普通のTextBoxならまだしもRichTextBoxで等幅がデフォルトとかないわー
HTMLリファレンスみたなXAMLリファレンス本ってないかなあ
網羅したらとんでもない厚さになるぞ MSDNで引いたほうが早い
Bindingとコントロール作成の概要をみっちり抑えた本を出してほしい。 じゃないと作って動いてくれても不安たっぷりものしかできない
Bindingの書き方変わるとか変わらないとか
まずBlendに自動コード補助っていうのか、Visual Stadioについてるコード補助を付けてくれたらもっとましになる気がする。 あとBlendのエディタもVSと同じように見やすくしてほs・・・ ここでいうことじゃないか
Blend3のコードエディタはIntelisence効いてた気がする
VS2008だとバインディングの記述とか補完してくれないから不便だな
コードビハインドでnullチェックしなきゃいけないのがうざい
C++はネイティブコードに力を入れるらしいよ もともとC++/CLIってネイティブコードと.NETの相互運用のためだけに作られた言語であって WPFなんか使えたって意味がない
WPF+CPPとか使ってる奴いないと思う てか、もとからBlendはVB、C#(SLはJavaScript)のみだ
WPFをC++/CLIで使ってる奴なんて居ないだろw
つまり、マイクロソフトがWindows GUIのスタンダードとしてWPFを採用することになると ますますVC++は使い物にならなくなっていくってことだな? .NETへの傾倒が強まれば必然的にVC++はあの世行きか。
>>452 何年か前に見た夢だな。
現実になればいいが。
>>452 そこはまあ上手く役割分担していくんだろう
C#もVBも高速化していったら終わりだが
ここに1人いるぞ、WPF + C++/CLI。 いやまあ、HwndHostとかD3DImageとかの部分に使ったことがあるだけで、WPF部分はほとんどXAML/C#だけどね。
.NETじゃサービスとかデバイスドライバとか書けないんだからC++が死滅するとかアリエナーイ
Windowsサービスなら書けるが、どのサービスのことだ?
どの種類のXAMLファイルでも分離コードは使えますか?たとえばResourceDictionaryのXAMLファイルとか。 というのもプロパティに値を代入するのにバインディングを使うのが面倒なのでそこだけコードでやりたいのです。
依存プロパティはどう見ても設計ミス。
で結局WPFは実アプリでの使用に足るパフォーマンスのでる汎用的なプラットフォームになったのかね? 未だに向き不向きとかある?
ブラウザアプリケーションはWPFのXBAPは衰退してシルバーライト使ってくださいにかわっていくと思う
既にそうなってるよな。
むしろ設計ミスは依存プロパティのようなニーズを想定できなかったCLRやC#の方だろ
XAMLの要素のプロパティ名を設定したポリシーに従って並び替えてくれる機能ありませんか?
自作 XMLだから簡単だろ
467 :
458 :2009/10/19(月) 22:01:35
hoge.xamlに対し、hoge.xaml.csファイルを用意して、 hoge.xamlのルート要素にx:Class="testApp.hoge"のようにhoge.xaml.cs中のクラスを指定。 hoge.xaml.cs中のクラスはpartialにしてコンストラクタにInitializeComponent();を追加すれば うまくいきました。hoge.xaml.g.csはどのタイミングでかはわかりませんがVSが自動で作成してくれます。
Toolbar 内に <button Command="{Binding XXXCommand}"> <Image /> </button> みたいな感じでボタンを作りました。 CanExecute()==false のとき、クリック不可に なるんですが、あわせてグレイアウト(もしくは 半透明に)したいんですが、どうすれば よいでしょうか?
デフォルトで白くなるはずだけど それじゃダメってことならTemplateいじることになる
白くなんのはIsEnableでね? とうろ覚えてみる
IsEnabledでも画像は変わらない
そうか、画像か Buttonの子はGridにして、そのGridの中にImageとRectangleを配置 でRectangleのFillは#9fffとかそんなのにして Rectangle.StyleのTriggersにDataTriggerでButton.IsEnabledの変化時にRectangle.Visiblityを設定 とかどう? ちなみにCanExecuteがfalse返すときはIsEnabledもfalseになるよ
473 :
デフォルトの名無しさん :2009/10/20(火) 15:44:41
>>472 そこまでするならテンプレートでVSM使った方がいい
>>473 今んとこそう言うもの
ぶっちゃけバグつか未実装部分
>>473 メイリオの特性。Y軸アンチエイリアスは実装されているよ。
MSゴシックあたりで試すといい。
単一のResourceDictionaryオブジェクトを、複数のリソースにMergedDictionariesしても大丈夫なんですか? 一応問題なく動いているようなんですが・・・
その心配なるほど。 あんま心配してなかったし何も起きていない気がする。 ImageとかFreezableなオブジェクトも大丈夫なはずだよね?よね?
まぁ、出たての技術だから仕方あるまい。
アニメーション移動なんてするとき、せっかくコードが分離できるっていってんのに 俺はいまだに「このイベント呼ばれればこのストーリーボードを呼べ!」といったコードを書いてしまう。 というかこっちの方がまだ簡単で読みやすいと思ってしまうんだけど、みんなはどうしてる?
483 :
デフォルトの名無しさん :2009/10/22(木) 20:59:13
コードからBeginしたほうがわかりやすいですよね。 量が増えると どうかというのがありそうですが、 その前にあんまアニメーション使わないw
アニメーションのきっかけになるようなイベントを出してそれをアニメーションにつかうかはXAMLで定義って感じかね。 まぁどこまで分離出来るようにするかによるんだろなー アニメは適度に使うとUXあがるとは思う。
みんなBeta2入れた? 一部の奴が騒いでたビットマップフォントが表示されるようになったんだが。
486 :
デフォルトの名無しさん :2009/10/23(金) 01:40:05
いま入れてる途中なんだが時間かかるな
487 :
デフォルトの名無しさん :2009/10/23(金) 01:42:20
うん、普通に嬉しく思うよ
MenuのPopupやComboBoxでClearType有効になったのもかなり嬉しいね。
ListView のヘッダとかスクロールバーとかのデザイン(マウスがあると青く 立体的になるところ)を変えたいんですが Triggers で Background 変える だけだと一瞬だけ変わってすぐに元の青いものになってしまいます。 ControlTemplate でやるのかなのかなと思うのだけどうまくできなくて どこかにサンプルありませんか。 msdn のやつはみたんですが解説が少なくてポイントがよくわからないです
MSDNのListView ControlTemplateの項に載ってるリファレンス実装を丸ごとListView.ControlTemplateにコピペして改造 どう弄ればいいかはそのテンプレート見ればだいたいわかる
>>491 そのレベルに達していなくてmsdnのやつはStyleそのものしかないので
ListView のどこにそれぞれTemplateとかStyleとかで追加したらいいかわからないです
ListViewは複雑でかなり変わったコントロールなのでまずはButtonなどで練習したほうがいい button wpf controltemplate でググれ
>>494 WPFはMVVMがメインストリーム。MSDNに有名な記事があるだろ。
VMはそのVに特化したMの薄皮って認識で大体あってる?
外れている。
( ̄д ̄)エー
499 :
デフォルトの名無しさん :2009/10/24(土) 13:53:39
public static readonly DependencyProperty DataProperty = DependencyProperty.Register( "Data", typeof(ObservableCollection<string>), typeof(testcon), new PropertyMetadata(new PropertyChangedCallback(OnDataPropertyChanged))); とやってバインド元のObservableCollectionにADDしてもPropertyChangedCallbackが 呼ばれないのはなんでなんだぜ? これが単なるStringだったりintだったりすると問題ないんだけど。 そもそもやり方が間違ってるとして、ObservableCollectionから追加や削除の通知を 受けたい場合はどうすりゃいいん?
.Data.Add("hoge"); // Data 自体は変わってないのでOnDataPropertyChangedは呼び出されない .Data = new ObservableCollection<string>(); // ここでOnDataPropertyChanged呼び出し ObservableCollection<T>.CollectionChangedを使う
501 :
デフォルトの名無しさん :2009/10/24(土) 21:45:00
>>500 おお、ありがとう。
こういうことでいいんかな?
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register(
"Data",
typeof(ObservableCollection<string>),
typeof(testcon),
new PropertyMetadata(new PropertyChangedCallback(OnDataPropertyChanged)));
private static void OnDataPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
testcon tc = d as testcon;
tc.Data.CollectionChanged += new NotifyCollectionChangedEventHandler(tc.OnDataCollectionChanged);
}
private void OnDataCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// Dataに追加や削除があったら呼ばれるよ
}
test
MediaElement.SpeedRatio に値を代入しても 無視されるんだが、なんでだろ〜? エラーはなんにもでないんですが。
ファイル形式によってできるもんとできないもんがあるが Windows Media Playerで再生速度変えられる?
WPF4のWhat's NewにD3DやXNAとのInteroperabilityがない…
506 :
503 :2009/10/25(日) 22:22:34
>>504 そういう方法で確認できるのか。ご指摘の通り、
WMP でもだめだったよ。ありがとう。
>>505 D3Dに関してはD3DImageでもまだ駄目?なんだよね……。
Grid のうえに Button を配置して両者の Background を Black にしました。 すると、Button のワクだけが残ってしまいました。 この枠を消しつつ、その他の動作はデフォルトのままにする方法はありますか? ControlTemplate は設定してみたんですが、マウスオーバーとかの動作も 消えてしまったので・・・。
509 :
デフォルトの名無しさん :2009/10/26(月) 01:12:24
自分も悩んでてBlendでButtonを解体したりしていろいろ試してみたんだけど
そのワクは「Microsoft_Windows_Themes:ButtonChrome」っつーコントロールが描画してて
BorderBrushを変えようが何しようがどうにもならないので、
自前でこのページを手本にControlTemplateを手作りするしかないんじゃないですかね
http://msdn.microsoft.com/ja-jp/library/ms753328.aspx Blendなら「SimpleButton」を元に自分で改造していくとか
>>508 クリックやマウスオーバーに反応させるだけならCanvasでもなんでもいいのでは?
>>508 枠も黒にすればいいとかそういう話ではなくて?
512 :
508 :2009/10/26(月) 12:12:19
みなさん、レスありがとうございました。
>>509 やっぱ ControlTemplate 手作りですか・・・。その方向で検討します。
>>510 Canvas を使うって方法は思いつきませんでした。
ただ、MVVM で作ってるんで、Command プロパティが欲しいので
その方法はむりかも。
>>511 Style で BorderBrush を Black にしても無視されます。
うちは VS2008SP1 ですが、バージョンによって挙動が違うのかな?
FormattedText の Geometory を取得して、g.GetWidenedPathGeometry すると、もとの文字にはない余計な線が一本入ってしまってるんですが、 ("X" を取得すると "/X" みたいに) ↓のプログラムどこか間違ってますか? var ft = new FormattedText("X", CultureInfo.CurrentCulture, FlowDirection.LeftToRight, FontFamily.GetTypefaces().ElementAt(0), 16, Brushes.Black); var g = ft.BuildGeometry(new Point(0, 0)); g = g.GetWidenedPathGeometry(new Pen(Brushes.Blue,1)); var path = new Path(); path.Data = g; path.Stroke = Brushes.Blue; path.StrokeThickness = 3; grid.Children.Add(path);
3Dの球体にボタンやテキストを配置してくるくる回転させながら操作するアプリを作ってみた だからどうってわけじゃないがw
515 :
458 :2009/10/27(火) 13:45:53
うp
あーまたやっちゃったよ。もう嫌になるなあ
>>514 それ、タッチパネルデバイスならありじゃないのか
WM7はWPF動くのかのう
>>517 動かなかったらVS2010できないではないか
よくSFである、3D映像によるタッチパネルとかかっこいいかもな それか、シムズみたいな3Dの部屋があって、テレビクリックすると ズームして映像が流れるとか
3Dとか生かしたナイスなアプリはいつでてくるかなー 自分的にはイノセンスの最後に出てきたロボット製造工場みたいのキボン
Refrector 使って確認したんですが、 現行の WebBrowser は Navigating イベントで postData を見ることができないようです。 VS2010 で、この点が改良されるかどうかご存じのかたが いらっしゃいましたら教えてください。
TransformGroupで回転とスケーリングと一様歪みと平行移動を組み合わせる MatrixKeyframeを継承してキーフレームを自作してしまうこともできそうだけど単純な線形補完では意味ないから余計に難しいと思う
動画プレイヤーを作ってます。 DockPanel の中央に動画、下部にボタンのならんだツールバーのある普通の配置です。 この画面をフルスクリーン表示にしたときは、ツールバーを非表示にして、 マウスを画面下部に持って行ったらツールバーが出てくるようにしました。 現在は、Height を調整しているのでが、そうするとツールバーが出てくると、動画のサイズが変わってしまいます。 ツールバーを表示しても動画のサイズを変えないようにするにはどうしたらよいでしょうか? わかりにくい文章ですみません。
同じパネルに入れないで、かつZオーダーいじってみたらどうだ
まずなんで動画プレイヤーなんて作ろうとするのか理解できない。 Media Playerで十分。
527 :
524 :2009/11/04(水) 02:17:59
>>525 なるほど。その方法ためしてみます。
ありがとございました。
1つのプロパティにおいて、アニメーションを合成することってできる? 例えば、すばやく右へ平行移動してる最中にクリックすると左への平行移動も始める(結果、減速してるように見える) ってなことを1つのRenderTransformでやる。 Canvasなんかのコンテナ用意して別々のRenderTransformに適用すればうまくいきそうだけど、 できるなら1つのでやってみたいなあ、と。あんまり意味ないかな?
TransformGroupでどうだ?
WPF,compizとかと比べるとダメダメじゃね(´・ω・`)
なんで全く関係の無いものを比べてんの? compizと対応するのはDesktop Window Managerだろ? WPFと対応するのはGTKやQTだろ?
>>530 なんで気づかなかったんだろう
TranslateTransform2つ用意したらできたよ!ありがとう
ある TextBlock のフォントサイズは、別の TextBlcok のフォントサイズの 1/2っていう指定を xaml でしたいんだけど、IValueCoverter を実装する以外に 方法ないかな?
537 :
535 :2009/11/12(木) 17:05:12
>>536 できれば xaml だけですませたかったんだけど、やっぱ無理なんだね。
ありがとう。IValueConverter実装で行ってみる。
>>537 まあ、根本的な解決にはなってないが、どうしてもXAMLだけで済ませたいならRendarTransformで描画を半分にしちゃうとかw
WPF使ってる人なんていんの?
いっぱいいるぞ??
日本に限定しなけりゃね。Visual Studio 2010が出れば状況が変わるかもしれんが、 いかんせん今では日本語では資料がないし、良い図書がない。 WinFormならいきなり新人に触らせてもググりながら覚えていけるだろうがWPFは無理。 本もEssential WPF程度しかない。アレはある程度C#/WPFの知識がある人じゃないと読めないだろ。
MVVMもなんか色々面倒だしなぁ。 βさわってないからなんともいえないけど Expression BlendみたいなのがMS製品で存在する以上、 VS2010でもフォームいじりは今一な感じになりそうな気がするよ・・・
WinForms相当の見た目でいいなら2008のデザイナでも十分だろ
Blendたけーしなあ SVGならInkscapeあるしこれをXAMLに変換できれば画像はなんとかなる?
>>543 プロパティの説明が出なかったりXAML直接編集しないと出来ないこと多かったりで
なんか完成度低くない?
VS2010のWPFデザイナは進化してるんだっけ? Freamwork4の見どころのPallarelは3.5でも使えるようだし 今Blend3+VS2008な人は2010に移行する必要ないよね
Blend3におけるWPF4のサポをSP以外にしたら絶対に許さないよ
CLR4で作り直さないといけないからSPでは無理だろ アップロードに金がいるかどうかは別だが
しかしながら 多くの人がインスコを渋っていた.NET3.5もWin7ではプリインスコになったってことで 気軽にWPFを使う気になったが WPF4&.NET4でまた「動かない」「入れたくない」云々のご意見を頂戴することになるのか・・・
タブブラウザのメニューリスト式タブ切り替えのようなものを作ってるのですが、 例えばこのようなクラスがあるとして、 public class Tab{ public bool IsCurrent{ get; set; } //今表示されてるタブか否か public String Title{ get; set; } //タブのタイトル } これをObservableCollectionに突っ込んだクラスを作って、 public class Tabs{ public ObservableCollection<Tab> TabsList { get; set; } } これをXAMLでContextMenuのItemsSourceとバインディングして、 DataTemplateを作ってあげて複数のTitleが一覧表示されるところまではうまくいったのですが、 : <ContextMenu DataContext={(略)} ItemsSource={Binding(略)}> <ContextMenu.ItemTemplate> <DataTemplate><Grid><TextBlock Text="{Binding Title}"/></Grid></DataTemplate> </ContextMenu.ItemTemplate> : ItemsSourceから生成されているはずの 各々のMenuItem要素のプロパティにアクセスするにはどうすればいいのでしょうか? IsCheckedプロパティをIsCurrentとバインドさせたいと思っています
SPでランタイムが配布されるまでは3.5で頑張るさ・・・
AllowTransparencyを有効にしてるとウィンドウ枠が消えるけど 任意にリサイズさせたいときはどうしてる?やっぱりCanResizeGripしかない?
>>554 やっぱりそうなのかあ
ZuneSoftwareみたいな、ドロップシャドウを出しつつ全方向からリサイズできたらかっこいいなあなんて思った
>>551 ContextMenu.ItemContainerStyleでスタイルを設定するのが楽かな
質問です。 [前提] Gridにbackground、foregroundという名前の二つのListViewを重ねて表示しています。 両方ともItemsPanelをCanvasに設定し、それぞれ任意の位置に図形を表示します。 [やりたいこと] foreground上の図形がクリックされた場合それを選択するのですが、 クリックしたポイントに図形がない場合、background上の図形を調べ選択したい。 [現状] foreground、backgroundの順でHitTestしているのですが、なんだか二度手間のような気がします。 ご教示お願いします。
558 :
デフォルトの名無しさん :2009/11/17(火) 18:57:36
>>556 できました。ありがとうございます
BlendだとContextMenuのプロパティをGUIから新規作成するのが容易にできないので見落としてました
Setterっていうの邪魔だで削ってちょ
>>541 ある程度ってどの程度?
今日本屋さんで注文しちゃったよ
ウワーーーーン
なんで名前空間がURLなの? わけわかんない
むしろその発言がわけわかんない
たぶん、XML名前空間のことだろ とりあえず、XMLの基礎知識なのでスレチ
BimapEffect は重いらしいんで、Effect に使用と思ったら、 OuterGlowBitmapEffect がないんだけど、 これは BitmapEffect 使ってろってこと?
SP1でBitmapEffectもハードウェアアクセラレーションされるようになったらしいよ?
IsEditableがtrueなComboBoxでIMEをオフにするにはどうすればいいんですか? TextBoxならInputMethod.IsInputMethodEnabled="False"でできるんですが…
>>561 C#2.0の機能すらよくわからない俺でもそれなりに読めるけど
けっこうちんぷんかんぷん。
「こんな機能を実装しました。他にも同様の手段がありますがこうこうこういう理由でこれを選びました。」
「従来のだとこういう風なことはこういう理由で実現しづらいものだった。
なのでWPFではこういう手法でこの機能を用意しました」
「なぜこのオブジェクトが必要なのかはこういう理由で・・・」
みたいな事を詳しくいっぱい書いてるものだと思ってたけど、期待したほどでもなかったな。
まだコントロールの章を読んでる途中だけど
>>569 Blendを使っている場合は、テンプレートの編集→コピーして編集 を行い、
Blendを使用していない場合は、
ttp://msdn.microsoft.com/ja-jp/library/ms752094.aspx に書かれているComboBoxのスタイルを<Window.Resources></Window.Resources>タグがなければ記述し、このタグ内にコピペする。
あとは、PART_EditableTextBoxというのがComboBoxの入力コントロールとなるのでこれにInputMethodを設定すれば
いけると思われ。(ごめん今は検証できる環境がないので未検証)
>>559 ありがとうございます。
foregroundのMouseDownなりをキャッチして、
e.OriginalSourceがnullならbackgroundをHitTestという理解でいいでしょうか。
>>541 IntelliSenseが最良のC#参考書と言われるのと同じように、
結局Blendであちこちいじってみるのが一番の習得法だったりする、というのが実感
でも参考書代わりにするにはちょっと高すぎる
Blend Expressが欲しいなあ
MSとしてはそこの領域はVS(Express)2010のXAMLデザイナに任せるということなのかもしれないけど
>>570 あの本は重要な部分の説明がさりげなくボロっと落ちてたりする。
各種機能を一回触ってある程度使って中身を分かっている人なら理解できるだろうが、
ゼロベースで読んだらかなり苦戦すると思う。
575 :
569 :2009/11/18(水) 22:29:10
MergedDictionariesってなによ 最初から全部MergedDictionariesにしとけよ いちいち書かせるなよ めんどくせーな
<ContentControl Content="{Binding}"> <ContentControl.Style> <Style TargetType="ContentControl"> <Style.Triggers> <DataTrigger Binding="{Binding Hoge}" Value="{x:Null}"> <Setter Property="ContentTemplate" Value="{StaticResource temp1}" /> </DataTrigger> </Style.Triggers> <Setter Property="ContentTemplate" Value="{StaticResource temp2}" /> </Style> </ContentControl.Style> </ContentControl> Bindingの値によって表示するコントロールを変更するXAMLなんですが、こんなやり方でいいんでしょうか? もっとスマートなやり方ないでしょうか?
578 :
566 :2009/11/19(木) 00:46:10
XAMLプログラミングって読んだほうがいい?
>>579 スタイルやテンプレート、バインディングに関してあまり自身がないなら
読んだほうがいいかも。
3Dのことに関しても書かれているが、興味なければ読み飛ばしてOK。
D2Dを直接使ってるんじゃね
直接ってWPFがDirect2D使うことはないでしょ Direct2DってDirect3Dのラッパーみたいなもの 立ち位置としてはWPFと同じようなものなので使う意味がない
585 :
デフォルトの名無しさん :2009/11/19(木) 22:59:08
WPFアプリからDirectWriteを扱う必要性もない
その辺勘違いしてる人多いよな D3DXみたいなものに過ぎない
IE9の描画にWPF使ってるのか?って話に対して (WPFを使わず)Direct2Dで描画しているのだろうと書いたわけだけど?
それが現実的にありえないという話では?
?? IE9の描画にWPF使ってるんじゃね? →WPF使わなくてD2D使ってるんじゃね? →WPFがD2D使うわけないじゃん(????) ってことだよな。
で、おまいらWPFつかってるの? なんか昔は柔軟だけどもっさもさだった気がしたんだが、その辺は使えるレベルになったんでしょうか?
>584 この人の読解力がダメダメって事でFA。
XPだともっさもさ
7とVistaだけサポートするからたぶん大丈夫
WPF使ってることがうりになるぐらいだから まだ普及したとは言えないよなぁ Silverlightだけ生き残ったりして
正直SilverlightはDrawingVisualだけ実装して欲しい。
596 :
デフォルトの名無しさん :2009/11/20(金) 00:37:43
WPFってVisual表現の最終形な感じがする。 扱いにくいのがアレだが
がーんだな
>>585 >WPFアプリからDirectWriteを扱う必要性もない
ん?
.NET 4 beta2のWPFアプリではdwrite.dllがプロセスに読み込まれてるよ。
実際どこかでDirectWriteを使うって話も読んだ気がする。
確かに似たようなもんだが、Direct3Dとの相互運用がマシになるなら WPFがD2D/DWriteをインフラに使うのは十分ありじゃね?
>>599 あ、そうだったんですか。
「DirectWriteはWPFが自前で行ってるテキスト処理と同等の表現を
Win32アプリからでも扱えるAPI」だと聞いてたもんで。
じゃあWPF4ではテキスト処理をDirectWriteに委任することになったってことですかね?
んーそこら辺の処理を両方で実装することないから、WPFは2Dに関してはそっちを呼び出すことにしたって事じゃないかね?
>>597 URL見ただけでどんな記事かわかるってのはいいなw
Direct2DやWriteを取り入れて これまでより速くなることを期待してもいいのかな?
描画で落ちてるか、パース過程やその他の処理で落ちているのか。 そこ問題が明らかでない限りなんともいえないでしょ。
描画で落ちてるからDirect2Dを使うんだろ
GDIからD2Dにスイッチしてfpsが上がるデモをやってる位だから 少なくとも地図ぐりぐりスクロールみたいなAJAXアプリでは 描画がボトルネックになってると認識してるんでしょう。 あとテキスト描画エンジンを一新したいという意図もあるだろうし。
マネージドでGDI+で描画してたのってD2Dで速度アップとかするんだっけ?
609 :
デフォルトの名無しさん :2009/11/20(金) 20:53:02
>>604 それは間違い
取り入れたというより,WPFの低レベルな部分をC++からも使えるようにしたようなものを
Direct2DやDirectWriteと呼ぶことにしただけ
>>610 はどう読んだらそういうレスになるんだろう?
WPFの話なんだかIEの話なんだかごっちゃになってないか?? ◯(IEに)D2Dを取り入れて速くなることを期待 ×(WPFに)D2Dを(ry
WPFのWebBrowserはどうなるんだろ D2D使うんだったら空域分けずにWPFのサーフェスに直接描画することもできそうなもんだけど
>>612 それは逆だろう。
>>599 の「.NET4ではDirectWriteを使っているらしい」という
レスから話が繋がってる。
WPFはアプリケーションをHTMLでつくっちゃおうというものと考えていいですか? HTMLの勉強を先にしたほうがいい?
そんな何も調べないで真っ先にこんなところで聞くようじゃ 何やっても身に付かないよ。
WPF、なんかいまいち波に乗り切れてないような・・・ なんでだろね。ハードル高いのか?必要ないのか? ちまたではLinuxの奴の方がすごいとかも聞くんだが、どうなんだろ? アーキテクチャ的に、あとプログラミングモデル的に両者の違いとか教えてたもれ。
まったくの別物なんだから「使ってみろ」としか言えん
何も手を動かさないでうわべだけの評論を繰り返す典型例
>>617
自由に移動拡大のできる2Dのグリッドを表示したいんですがこういうのWPFで扱うときどうするのが正解なんでしょう?
>>617 個人的には「遅いから」のひとことに尽きるような。
Vista/7なら速いです、はい
>621 言うほど遅くもないだろ。 .NETの技術は業務利用されてナンボだと思うんだけど、まだ一部にWin2K端末が 残ってる企業は多々あるから、積極的に採用しづらいんじゃね?少なくともウチはそう。 来年〜再来年あたりは状況が変わってくると思うけどね。 バインディングシステムが強力なので、個人的にはすぐにでも乗り換えたい。
WindowsFormに比べると、相当に重たいでしょ。 AtomのNetbookにWPFアプリは使いものにならないレベル
Vista世代(XP後期)以降の普通のデスクトップPCをターゲットに開発してるから、そんな貧弱な環境はどうでもいいや 2kと同様に切り捨ててる。
切り捨てるって判断できるのはお客さんだからなぁ。 PC 入れ換え代込みで納得してもらえる程 WPF を積極的に押せる説得材料が思いつかない。
官公庁に景気対策だって言ってやればいい
>623 INotyfyPropertyChangedは書くのが正直めんどくさい。 >625 まじっすか・・・ Linuxで3Dぐにょぐにょやってるやつは速そうなのに、あれとはやってることが別物なの?
ゲームならスペック上げるのもまあ納得してもらえるかもしれないけど 業務アプリは難しいだろうね。 作り易いら工数下ります!って言えるほど習熟してないしなぁ・・・ ところで将来的にWindowsFormは廃止されるのかな?
WPF使われないのは開発環境が貧弱だからだ、ってーのはM$も認識してる VS2010待ちだな
>628 確かに最初は面倒臭いけど、フォームクラスにイベント処理をぐちゃぐちゃ 書くより全然マシだと思う。 透過プロキシ使うとか、INotyfyPropertyChangedの実装を楽にする方法が 無いわけじゃないし。
WPFが使われない理由って、(それなりにちゃんとした)デザインが面倒だからじゃないの?
XAMLのできが悪いからに決まってる
BlendにVS並みのコード補助が効かないのが致命的
WPFで作られたVisualStudio2010が悲惨な出来だからなあ
betaは伝統的に重いって聞いたけど 正式版に期待
WPFってイントラじゃ致命的なぐらいおよびじゃない気がする
イントラっていうか、普通の業務システムではいらんな。 BIやエンジニアリング分野にはいいかもしれんけど。
eコマースなら出番があるかもしれん Panel系がどんな環境下でもそれなりに崩れずに見えるんなら、だが
Panel系はバカ正直な動作しかしない 崩れるかどうかは使い方の問題
641 :
デフォルトの名無しさん :2009/11/22(日) 00:27:14
>>632 個人的には、これが正解かな。
WinFormは、ど素人でも見た目はそれなりの形になるのがいいところ。
起動が遅いよ。
まぁFormsは外部からコントロール持ってこないか作らない限りちょっと何かやろうとすると破綻するわけだが。
644 :
デフォルトの名無しさん :2009/11/22(日) 01:24:42
WinFormはいまのままでいいよ。それ以上はWPFの出番だね。 WPFぐらいになるとWinForm使えるレベルの人材では絶対無理な領域なんだよなぁ。 生産性求めるというより、ある程度お金賭けてでも視覚化すること効果のある分野が普及しそうに思う。
美的感覚を要求されるからな
とりあえずポトペタでも書けるわけだし、遅いのはPCの性能があがれば解決するし。 VCのデザイナがWinFormと同レベルぐらいになって カスタムコントロールが出揃えば業務システムなんかでも使われるようになるんじゃないかね。
客の環境で遅いのは致命的な問題 非開発系の環境ではXP + Celeron1Gあたりが普通に使われている そういうマシンが全部死ぬまで簡単には普及しないんじゃないか?
今のところ、客の発想がWinFormsレベルだから、WPFの出番がないのだと思う。 フリーソフトやマイクロソフトの製品でWPFがある程度使われるようになれば 客からWPFでないと実現しにくいような要求が出てきて、 自然とWPFが採用されるんじゃないかな?
Formの上でWPFの様なことが出来る仕組みを作ったうちの会社は勝ち組(´・ω・`)
業務システムと言えば、Formにコントロールを100個も200個も貼り付けて 「なんか重いんですけど」とか「なんかちらつくんですけど」となるのが WinFormのFAQだった気がする。 最近はあまり見ない気もするけど、 WPFじゃなくてWebアプリに持って行かれたのかねぇ。
Webアプリでも10000件のレコードを表示してくれ、 それぞれボタンを押して処理させてくれ、 画面遷移は少なくしてくれだのなんだので 結局、重くなるループ。
コントロールの動作の細かいところでプロパティがない とか用意されてないやつを変えたいというのも FAQ だよ なぁ。API を使ってこのメッセージを…みたいに返すやつ。 WPF ならすぐだなってのも多い
そうなんだよな。 ただなんかWebアプリっていうよりajaxってなんかひ弱な感じがしない? バッドノウハウの塊ってのはいいすぎだけど ライブラリが乱立しすぎてなんか怖い
ここでSilverlightですよ
>>654 ああ、要件上は解決できるさ。要件上はな。
Silverlightへの力の入れ方は異常 そのうちWPFも吸収されるんじゃね
659 :
デフォルトの名無しさん :2009/11/22(日) 18:23:58
デベロッパの期待がSilverlightのほうが上なんだろうね
HTML5やSilverlightで X-Windowは完全に死んだね
生きてたことってあったか・・・?
尊厳死の話か?
Grid で任意のセルに割り当てられた UIElement を取得するにはどうしたらいいの? uiEle.SetValue(Grid.RowProperty, y); uiEle.SetValue(Grid.ColumnProperty, x); で割り当てはできたんだけど、grid.GetUIElementAt(x,y) みたいなメソッドを 見つけられないんだ。
ないよそんなの 同一のRow&Columnに複数の要素入れることもできるんだから Grid.ChidrenをループしてRowとColumnを取得して判断したら? あ、RowSpan/ColumnSpanの考慮も必要か それから普通Grid.SetRow/SetColumnメソッド使う
セルに要素を割り当ててるんじゃなくて要素にセルを割り当ててるんだし Gridのレイアウトに使うだけの情報だから取得が必要な使い方をするのが間違ってる
WPFのバインディングって目玉機能みたいに言われてるけど 昔のアプリでも似たようなこと実現できてるよね。 WPFからアプリ開発はじめた身としては以前とどう違うのかさっぱりわからん かといっていまさらWinFormとかやりたくないしな
スライダー動かしたらテキストボックスの値が変わるとか WPFなら一瞬でできるけどWinFormsだとデータソースとかいちいち介さないといけなくて余計に面倒で普通にコード書いたほうが早い
・WinFormsは、一部の非Control(MenuItemなど)にバインドできないのがいまいち。 IBindableComponentを実装すればいいんだけど、面倒くさい。サンプル少ない。 ・FormatイベントやParseイベントよりも、IValueConverterのほうがスマートだと思う。
TabControlのTabItemをItemsSourceで生成して、 ContentTemplateにいろいろコントロール入れてもインスタンスは1個しか作られないんじゃん テキストボックスに入力した内容なんかが全部のタブで同じになっちゃうじゃん それじゃ使えないじゃん
ListViewのGridLines="True"ってどこにかきこめばいいのでしょうか? XAML初心者17才女子高生です
16才以上は女じゃないのでいりません 普通に <ListView GridLines="true" ... > でいいと思うけど。
ありがとう
>>671 さん
Expression Blend3だと
メンバー"GridLines"が認識されないか、アクセスできません。
とでます
GridLinesなんてプロパティは存在しないからな セルって意識があんまりないGridViewじゃ無理じゃないかなぁ
何か激しく間違っているかもしれないが、以下のようにするととりあえずグリッドラインっぽいものを表示することが可能。 <!--Resource--> <Style x:Key="MyItemContainerStyle" TargetType="{x:Type ListViewItem}"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> <Setter Property="VerticalContentAlignment" Value="Stretch" /> </Style> <!--ListView--> <ListView Name="lv" ItemsSource="{Binding}" ItemContainerStyle="{DynamicResource MyItemContainerStyle}"> <ListView.View> <GridView> <GridViewColumn Header="col1"> <GridViewColumn.CellTemplate> <DataTemplate> <Border BorderBrush="#FF000000" BorderThickness="1,0,1,1" Margin="-6,0,-6,0"> <StackPanel> <TextBlock Text="{Binding col1}"/> </StackPanel> </Border> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView>
WPFのチャンピオンベルト奪取するよ(´・ω・`)
>>669 DataTemplateの制約だろうね。
タブ付きMDIの代わりはまだ自作するしかない。
XAMLプログラミングって絶版なのかな 売ってないね
WPFってGUIの部分だけなの?本体のコードはC#で書かないとだめなの?
やらせる内容による でもエスパー発動するとC#で書かないとだめ
アニメーションするかどうかをユーザーが決められるようにする場合、 アニメーション定義はXAMLかコードどっちがいいですか? というかXAMLでできるのかな・・・
今ならどの本がいいの? エッセンシャル WPF?
エッセンシャルも3.0時代のだし少し古いね 翻訳がおかしいのか説明不足なのか、内容がいまひとつわかりにくいし 他の書籍はわからん
WPFで開発した画面のサイズより小さな解像度のディスプレイで 画面を描画すると、そのディスプレイの画面サイズに 自動調整されてしまい、画面の見た目が切れてしまうの ですが、これを回避する方法はどうすればよいのでしょうか?
知らんがな 画面に収まらないものはどうしようもないだろ 折り返すなり省略するなり縮小するなり好きにしろ 使い方の問題であって一般にどうこう言えるような問題じゃない
あるサイズ以下はサポートを打ち切るってのも手ではあるな。
良ければちょっと画面キャプチャあげてみ
そういうのをセンス悪いっていうね
スクリーンサイズより大きなウィンドを表示したいって言ってるんだよね? 考えれ。
まぁ常識的に考えてパネル内にスクロールバー付けて表示だな
Blend使うと何ができるの?
デザインが簡単になったりコントロール作ったりするのが楽になったりする んじゃなかったっけ?
694 :
デフォルトの名無しさん :2009/11/29(日) 14:36:38
VSのXAMLエディタと比べると、「テンプレートの編集」で コントロールを解体して中身が覗けるのが一番大きい違いだなあと使ってて思う
ContentPresenterてなんだよ必要なのかよお〜
XAMLって無駄に覚えること増やしてるよね そんなの裏でやっちゃえよ、っていいたくなるのがたくさんある
697 :
デフォルトの名無しさん :2009/11/29(日) 18:35:08
テンプレート編集とか見るXAML大きすぎてキモイよなw 細部まで手入れできるって点では進化なんだろうけど。 単純に形にするという点では難しい。 とりあえずUIとかのスタイルを、荒い粒度でいいから、 ボタン一発とかで切り替わって、ある程度のデザインの品質になってくれれば 良いなぁとも思う。
カスタム自由度が高いのは悪いとことじゃない ただ今のIDEの性能が低すぎて事実上Formより退化してる Ver.3からマトモになるジンクスの崩壊とも言うな 4.0は話聞く限りはやっと使い物になりそうだが果たして
普通にVSで作ったプログラムのGUI部分を、WPFを使った物に変更できるもんなの? それともそんなツールとか用意されているの?
>Ver.3からマトモになるジンクスの崩壊とも言うな >4.0は話聞く限りはやっと使い物になりそうだが果たして WPFもXAMLも.NET 3.0で登場して3.5でさらに改良されたわけで 期待するなら4.0で合っているんでは?
701 :
デフォルトの名無しさん :2009/11/29(日) 19:11:25
WinFormsからマイグレーションするようなツールは今のところないんで無いかな。 ぜんぜん別物なんでその必要が無いのだと思うけど。
WinFormsとWPFを両方使うことは可能なの? ある部分だけWPFを使って、その他は従来通りみたいな。
両方向に相互運用可能だよ、一応 デザイナとかがどこまで対応してるかは知らないけど
>>702 できる。その逆もしかり。
現状あえてWPF使わなきゃいけない事情がないから
そんなことしたことないけど。
WPF使ってるときに必要なカスタムコントロールが無いから
Formsのを使う、ってことはこれから先ありそうだけど。
そうですか。 次の仕事のGUIをどうしようか調査していたんですが、 まあ先を見越してWPFをメインにして、ない部分はFormsを使うようにしたいと思います。
WPF on WForm on WPFはだめらしい(´・ω・`)ショボーン WForm on WPF on WFormもだめらしいマタ(´・ω・`)ショボーン
まるでわからんぞな、もし ユーザーコントロールで使ってるtextBlockの内容を そのユーザーコントロール使ってるWindowからいぢるにはどうしたらいいぞね?
Nameが付けてあればuserControl1.textBlock1のようにしてアクセスできるはずだけどそれが許されるのはVB厨だけ ユーザーコントロールにプロパティを定義するのが正しい
やっぱりわからんぞな;; あきらめるぞな;;
VB最強だな(´・ω・`)
711 :
デフォルトの名無しさん :2009/11/29(日) 21:48:35
UserControlに依存関係プロパティを付けてそれ経由でアクセスするのは WPFの基礎テクニックだと思うのでこれを機にしっかり勉強した方がいい Visual StudioでUserControl.xaml.csを開いて「propdp」と入力して2回Tabを押すと簡単 正直、依存関係プロパティとINotifyPropertyChangedは 書く量が多い割に内容はコピペなのでもうちょっとシンプルに書かせて欲しい気もする
だなぁ。自動実装プロパティ並のシンタクスシュガーはあっても良いんじゃないかと思うんだよなぁ。
あるスレッドでdoubleの値を不定期に変更してそれをTextBlockで観測したいんだがなにやればいいんだ?
714 :
デフォルトの名無しさん :2009/11/29(日) 23:16:36
INotifyPropertyChangedあたりはVSの機能で、 Excelライクな表に入力すれば生成されるとかでいいよもう。
できた UpdateSourceTrigger=PropertyChanged しるか、ボケ Binding入れた時点で自動で用意してくれ
Expression Blend 3 から VisualStudioよびだしてそちらでxamlに変更したら その変更がExpression Blend3に反映されなかった これはバグでしょうか?
Visual Stadio側で変更ファイルを保存したか?
もちろんした
新規プロジェクトでWPFアプリを選ぶと、最初にWindow1とAppのファイルが自動で出来るのですが、どう使い分けるのでしょうか? コールバック関数などはWindow1の方に記述されるようですが。
依存関係プロパティ作ってみてそれに値を代入しようとすると 作ったスレッド以外ではだめと言われエラー終了してしまいます なぜでしょう? INotifyPropertyChangeだとエラーにならないんですけど 依存関係プロパティはINotifyPropertyChangeに比べどういうメリットがありますか?
バインディングのターゲットにできるのが一番の特徴かな あとはCoerceが簡単にできる 添付プロパティもあるけどこれはかなり別件だな ざっくり言えば XAMLでインスタンス作るようなのはDependencyObject(やFrameworkElement)で コードでインスタンス作るようなのはINotifyPropertyChangedで ぐらいの感じ?
あえてWPFでドット絵ゲー作る事に明確なメリット・デメリットがあれば御教授お願いします。
ゲームなら,複雑なUI使わないんだったら特にメリットがないんだよなあ Direct3DやXNAと比べて手間もそんなに変わらないと思う どうせならSilverlight使ったら?
XNAはWin上で動かす場合でもXBOX360のコントローラしか使えないって時点でなんかちょっとね。 Silverlight は結構真面目にアリだと思う。WPFで書くよりそっちの方が未来がありそうだ。どうせ似てるし。
Silverspriteなんて無理やり感漂うものもあるけどな でも結構動いてくれて使える奴です
>>724 >XNAはWin上で動かす場合でもXBOX360のコントローラしか使えないって時点でなんかちょっとね。
XNAで初めて.NETに触った人は、ここにすごい拒否反応を示す人が多いみたいね。
でも実際はWin版のXNAって何か厳しいサンドボックスがあるわけじゃないので、
単にjoyGetPosをDllImportすれば済む問題だったりする。
ttp://msdn.microsoft.com/ja-jp/library/cc410473.aspx 元々.NETでデスクトップアプリを作っていた人は
「XBOX360のコントローラしか使えない」なんて思っていないんじゃないかな。
>>724 はXNAで.NET始めたの?
ゲ開のXNAスレがゲハに荒らされてるのを見るからに、XBOX360という文字に拒否反応を起こして思考停止してる人たちがXNAを使えないものと言いたがっている
>>726 フレームワークで用意されてる入力読取が使えないってのってなんか気持ちわるくない?
なんで DirectInput をそのまま使えるようにしなかったのかがよくわからんのよねぇ。
>>727 あそこは既にXNAの技術的な話が出来る場所じゃなくなってるからなぁ・・・
>>728 >フレームワークで用意されてる入力読取が使えないってのってなんか気持ちわるくない?
>なんで DirectInput をそのまま使えるようにしなかったのかがよくわからんのよねぇ。
その程度は笑って対処できないとデスクトップアプリではやっていけないよ。
WinFormのころからDllImportが必要になったことなんて山のようにあったじゃない。
このスレ的には、
「通知領域がWPFでサポートされていないのってなんか気持ちわるくない?」
「なんでSystem.Windows.Forms.NotifyIconをそのまま使えるようにしなかったのかがよくわからんのよねぇ。 」
てな感じかな。
そういやなんで NotifyIcon をそのまま使えるようにしなかったんだろ?
「Jumplist使ってくださいねv」
732 :
デフォルトの名無しさん :2009/11/30(月) 23:21:14
Windows7時代には、通知領域より ジャンプリストとオーバーレイアイコン使ってくださいってことじゃね? MSN Messengerももう通知領域には常駐してないし
きっと現実の世界で甲が死んだことを受け入れられない人の心を読めるヒロインが引きこもりになって常夏の仮想世界を作ってですね・・・
XNA 使うより SlimDX 使った方が正直色々面倒が無いと思うんだけどな。 箱◯でも動かしたいなら XNA 一択だけど。
MSとしては、 ハードに対するイニシアチブを握っておきたいが、 かといって自分で生産するようなリスクは避けたい立場。 特にPCは規格がオープンだからみんな参入可能なためリスキー。 ゲーム機はクローズドだから自分で作ったんだろう。 XNAのコントローラの問題は、ハードはこうあるべきだ、 という主張ないし囲い込み戦略の一端では。
SlimDXは安定度どうなのよ
いいかげんスレチじゃね? どこかに誘導してやってよ
740 :
738 :2009/12/01(火) 09:41:16
Canvas上でMouseMoveをつかまえたいんですけど Canvas上のControlの上(ボタンとかラベルとか)でしか MouseMoveイベントが発生して無いようなんですけど こういう仕様じゃないですよね? WPFはじめたんですけどどうもFormの頭を引きずってしまっていて・・・w
WPF ToolkitのDataGridで行番号を表示させるにはどうすればいいでしょう?
743 :
デフォルトの名無しさん :2009/12/02(水) 03:32:35
コマンドの作り方が分からない ICommand, RoutedCommand, CommandBinding, CommandBindings, 定義済みのコマンド… キーワードが多くてどこから手を付ければいいのか頭の中がグチャグチャになる
そこまでMSの流儀につきあわんでもよいとおもうがなぁ。 MSは結構やっちゃった的な実装してるのもあるし。INotifyPropertyChangedの実装とか最悪だろ。
>744 そうか? 実装が面倒なのは否めないが、リフレクション等黒魔術系のテクニックを駆使して コード量を減らすという方向よりは、素直かつ汎用性があって納得のいく解だと 思ったんだけど。どんな実装が良かったと思ってる?
>>743 基本はICommand。
その上で動いているのがRoutedCommand。
INotifyPropertyChanged はもう言語に手を加えてもっと簡単に利用出来るようにすりゃいいのにって ときどき思う
なんかよう分からんけど、xamlのコードビハインドにイベントハンドラを書くのは 良くないっぽいことらしいので、CAL真似してDelegateCommand<T>使ってる。
ObservableCollectionでどの要素が削除されたかって知る方法ありますか?
CollectionChangedイベントで取れるけど 質問に背景がありそうだな
>745 手動でプロパティ名を文字列で使って同じようなコード延々と書かなきゃいけない時点でだめかと。 言語的なサポート、もしくはヘルパー的なクラス、通知をサポートするスマートオブジェクトでもかまわんのだが。
んなものスニペット使え
スニペット使えって結局コピペで済ませってこととほぼ同意でしょ。 書いててなんか洗練されてないなあとは思うわ。 カスタム属性あたり使ってシンプルに使えないものかと思ってるんだけど なかなかうまくまとまらない。
>>750 ありがとうございました
他のことで解決したです
背景は内緒(はずかしい)
755 :
デフォルトの名無しさん :2009/12/02(水) 15:13:37
>>744 てことは、Button1_Clickにベタベタと処理を書いていく
VB的な(?)書き方もアリってことですかね?
でもまあ、それはMVVM的に美しくないし
ボタンからでもメニューからでもキー入力からでも
統一された方法で処理が呼べるってのは便利そうなのでもうちょっと頑張って勉強してみようと思います
>>755 ボタンでしかしない処理ならそこに書けばいいし
共通して使うのであれば どっかにまとめちゃう
ただそれだけのような気がする・・・
>>741 CanvasのBackgroundを透明以外に設定してみて
>>742 行番号の列を追加すればいいだけなのでは?
>>758 やっぱりそれしかないですか
ランキング表示(リアルタイムに変動)をさせようとしてて行番号が自動でつくと楽だなぁとおもったもんで
StyleとTemplateの違いがよくわからない
テンプレートというのはコントロールの外観を定義する実装の詳細なんだよ。 WPFのコントロールはそれ自身は外観というものを持ってなくて,たとえばボタンなら クリックされたらイベントを発生させる」という機能と,ボタンを意味付けるコンテンツ(文字列でも画像でも何でもいいんだけど) を持った抽象的な存在。具体的にそのボタンやコンテンツがどのようにして画面に表示されるかはテンプレートで定義される。 スタイルは単にコントロールのプロパティ設定をまとめたもの。
その違いを明確にしたくてわざわざSetterつくったのか エッセンシャルWPFみたらStyleでSetter使わない記述も検討してたらしいけど ていうかよく見るとそう書いてるな、この本にも
ぶっちゃけ、みんなwpf使ってるの? いつも今回こそはとwpfプロジェクト選んで挑戦するんだけど、GUIをなんとか するので手間ばっかりかかって、結局はformで作り直すことが多い。 もちろん、まだ自分自身が不慣れって言うのもあるんだろうけれど、よほど凝った 概観、たとえば従来ならownerdrawでなんとかしよう、みたいな例外的なケース でもないかぎり、まったくメリットが見出せないんだが…。全般的にアーキテクチャは すっきりしているはずなんだけれど、使おうとするとひどくわかりにくいという、非常に ちぐはぐな印象がある。
ぶっちゃけ使ってないなぁ。 勉強のためにちょこちょこ小さいプログラム書き捨てしてるぐらいだわ。
俺も横目で見ている感じだな。勉強はしているけど。
面白い事が出来るのはわかってるけど正直つかいにくいです
WPF使ったVisual Studio2010が悲惨な出来だからなあ
PCがしょぼいだけなんじゃないの?
ウィンドウ内に画像をたくさん張り付けるときは明らかに速いね 拡大縮小が絡むとさらに
VS2010は想像してたより全然使えそうなレベルで正直びっくりした
デジャブかな? この流れ、何か見たことあるぞ…
773 :
デフォルトの名無しさん :2009/12/03(木) 01:29:31
WPFはVS2010出てからでしょ WinForms並みの生産性があればいいけどね。 正直、今の状況は手を出しにくい。
WinForms並みの生産性っていうけれど、 WinFormsのRAD全開のアプリってめちゃめちゃ保守性悪くないか?
保守性は全く悪くないです
ポトペタで作ってたら保守性悪いだろうね。
VSで作ってる人と、Blendで作ってる人で 生産性の感じ方に違いがあるような気がする
サンプルプログラムがネット上で容易に手に入るようになったから、それを元にして作ることは出来るんだけど、 いざ全くゼロから作ろうとすると、全然出来ないことに気づくんだよな(´・ω・`)
0から大きな物作るのは大変だよね 俺も3年目にしてやっと一人で100万ステップ以上のソフトを設計実装できるようになったよ…
>>776 それ逆
ポトペタで再利用出来るように作らない人程保守性は悪い
>>780 再利用性を高くするためにコンポーネントの粒度を小さくすると
今度はポトペタそのものが大変になって、結局
「UI構築用の専用言語くれよ!」になっちゃう。なんだかんだでXAMLは使いやすいよ。
正直使いにくいです… まるで.net出たての頃のようです 著名人のブログみても使いこなせねぇという言葉しか見えない…
XPでWPFアプリのフォントが汚いのはどうにかして欲しい
HTMLメモ帳で書くような人種にはXAML使いよく見えるかも知れんが 大抵のプログラマはインテリセンスもロクに効かないような言語に用はない 既存コントロールの貧相さを自由度とかいって誤魔化すなと 次の4.0でそこらが解消できなきゃマジオワタ
Blendだとインテリセンス効いたりするんだろか。 VSEEしかもってない貧乏人だからなあ。体験版さわってみるかなぁ
うにょうにょ動いて凄いなとかバインドって便利だなとまでは思うのだけれど、 こんなコントロールどうやって作るのって所で俺、終了w
WPF、XAMLの質問だと回答ないことも多いのに 使えない、って話になると盛り上がるのな、このスレ
見た目キャッチーなのに、仕様が初心者キラーだからねえ
だねぇ。 WPFプログラミング(XAMLプログラミング)ものすごくしんどい。
最近ようやっとXAMLの嬉しさが理解できてきた。
なんだかんだいって結局難しいの一言に尽きるような
工数増えるのもなんかいやだ winapi使ってゴリゴリ書いてる時を思い出す
ロジックの分離ってのがなんか体感しづらい XAMLはハードコーディングでやってくのは楽だけどそこから脱却しようとしたら バインディングだのコマンドだのでわけわからんっす。
ノートPCでSynapticsのタッチパッド使ってると 全てのWPFアプリの全てのScrollViewer(を含むListBox, ListView, FlowDocument…)で タッチパッド隅を使ったスクロールが効かない 外付けマウスのホイールだと全く問題ないんだけど VS2010だとスクロールできるからWPF4.0じゃ改善されてんのかな?
ある程度単純なものは良いんだが、TabControlの実装とか見ると萎える 見た目を整えるのにそれを実現する構成を考えるのが難しく感じるな
>795 実装みてないんだが、全部XAMLでやろうとしてるって事? 手続き型で書くところを宣言的に書こうとしてる故の無理加減?
WPF toolkitのChartの凡例を非表示にするにはどうしたらいいんでしょ?
できた <charting:Chart.LegendStyle> <Style TargetType="datavis:Legend"> <Setter Property="Width" Value="0"/> <Setter Property="Height" Value="0"/> </Style> </charting:Chart.LegendStyle>
WPFで点を打つのはどうやればいい?
点はベクタ的には幅高さが0だから見えない 代わりに1x1のRectangleでも置けば
Silverlightの名前をWPF/Eに戻してくれないかなあ ググるのに二度手間
出てくる情報がまぎらわしくなるだけだろ
WPFの情報少ないからSilverlight参考にしてますが何か問題でも?
いっそ全部Silverlightで・・・
左右をパネルで分割したとする それぞれいくつかテキストボックスなどを含む でこの左右のパネルをそれぞれフォーカスのスコープを持たせた 左のパネルの上から三つ目のテキストボックスにフォーカスがあった でそこから右のパネルの適当なテキストボックスにフォーカスを移動させた その後右のパネルから左のパネルにフォーカスが移ってきたとき 左のパネルの論理フォーカスは上から三つ目のテキストボックスに残っているので このテキストボックスにフォーカスが当たる とこんな感じ
日本語で頼む
左右を羽目板で分割したとする それぞれいくつかの文書入力箱などを含む 飽きた
>>806 なるほど。
>キーボード フォーカスを持つ要素は論理フォーカスも持ちますが、
>論理フォーカスを持つ要素は必ずしもキーボード フォーカスを持ちません。
これは論理フォーカスを持っててもキーボードフォーカスを今持ってるとは限らんよ。ってことで、
キーボードフォーカスを持てない要素でも論理フォーカスを持ってることもあるよ。
ってことじゃないんですね。
ゲシュタルト崩壊させる気かw
812 :
デフォルトの名無しさん :2009/12/05(土) 01:00:06
>>812 Blend3だろ。でてそんなに経ってないし
>>811 エェー
>でこの左右のパネルをそれぞれフォーカスのスコープを持たせた
何を言ってるのか全然解らないんですけど
Silverlightのほうが盛り上がってる
VSTO で取得したオブジェクトを Binding すると Outlook が終了しないね。 WPF のバグなんだろか。VS2010 で直ることを祈る。
メモリリークしてんじゃね?WPF関係ない気がする。
820 :
817 :2009/12/07(月) 00:04:49
>>818 メモリリークってどの部分の?
DataContext に代入する1行をコメントアウトすると、outlook が終了するんだよ。
だから、Wpf 内部の Binding の処理を行ってる部分が間接参照を作ってて
そこを解放してないんじゃないかと予想してるんだが・・・。
まぁ、外れてるかも。
>>819 すまん、それ長くてどこがポイントかよくわからない。
質問者も質問して返事がないので、解決したのかどうかもわからんし。
Quit() はしてるし、プログラム内で参照してる部分に null を代入して
GC.Collect() もやってみた。でも、終了しないんだよなぁ。
ReleaseComObject()
何をバインディングしてるか知らんけど、OfficeアプリのCOM参照って明示的に 開放してやらんとメモリリークするんじゃなかったっけ? かつてC#でExcelのオートメーション使ったアプリ作ったとき、取得したCOMオブジェクト (Sheetとか)を全部自前で開放してやらんとExcelのゴーストプロセスが残って 「なんじゃこの糞仕様は」と思った覚えが。
説明書に「使用後はリセットボタンを押すこと」って書いてないか確認しる
824 :
817 :2009/12/07(月) 01:32:27
>>821 VSTO って ReleaseComObject しなくていいんじゃないの?
と思ってググってみると、
ttp://blogs.msdn.com/eric_carter/archive/2004/04/07/108898.aspx > you typically don't ever have to use ReleaseCOMObject
って書いてあるな。英語だからよくわからんが、
Binding したら ReleaseCOMObject が必要になるのかな?
あとでちょっと試してみる。
>>822 それをいちいちしなくて良くするために VSTO があるらしいんだが・・・。
上のブログに "typically" ってあるのが気になる。暇なときにゆっくり読んでみる。
>>823 Office のマニュアルにも VS のマニュアルにもそんなことは書いてないみたいだ。
自作アプリのマニュアルにその一文を加えるかは検討してみる。
> それをいちいちしなくて良くするために VSTO があるらしいんだが・・・。 ほんとう?
Binding の Converter にパラメータを複数渡す方法ってある?
Tuple
MultiBindingとIMultiValueConverter
ConverterParameterのことだろ
WPFでいうメタデータってなんですか?
色々あると思うが どういう文脈の話よ
VS2005ProとWinSDK環境なんだですけどWPFアプリプロジェクトのビルドはMSBUILDじゃないとダメですか?
>>831 カスタムコントロールをVSで作ったときに、そのクラスの
静的コンストラクタ内にDefaultStyleKeyProperty.OverrideMetadata(...)
なんてのがあって、それについて調べてるんです。
>>832 多分そう
xamlのコンパイルとかはmsbuildの担当っぽい
>>833 質問が漠然としてて要領を得ない
取り敢えずOverrideMetadataの引数に渡す型とそのメンバをMSDNで調べてみたら?
もちろんその派生クラスのもな
FrameworkPropertyMetadataでぐぐれ。
ttp://msdn.microsoft.com/ja-jp/library/ms771362%28VS.80%29.aspx ここにあるサンプルをVS2008EEでビルドするとエラーになるんですが、原因と解決策を教えてもらえませんか?
エラー 1 ソース ファイル 'wpfcalculator\csharp\Properties\Resources.Designer.cs' を開くことができませんでした ('エラーを特定できません ')。 wpfcalculator2
エラー 2 ソース ファイル 'wpfcalculator\csharp\Properties\Settings.Designer.cs' を開くことができませんでした ('エラーを特定できません ')。 wpfcalculator2
警告 3 ファイル 'Properties\Resources.resx' を処理中に、カスタム ツール 'ResXFileCodeGenerator' が失敗しました。
警告 4 ファイル 'Properties\Settings.settings' を処理中に、カスタム ツール 'SettingsSingleFileGenerator' が失敗しました。
プロジェクトがバグってるから作り直せ デザイナで開いて保存すれば*.designer.csは作成されるけど、それが解決しても別のエラーが出るし
>>837 レス、ありがとうございます。
プロジェクトを作り直してみます。
MS公式のサンプルなのになあ・・・
公式サンプルはWinSDKのプロンプトでmsbuildのやつじゃないか?
msbuildでも駄目だったぜ まあ、MSDNのサンプルなんて「大体こんな感じ」というものだから
wpfcalculator2.csprojが壊れているというか別物が入ってる。 AvalonCalculator2とか初期の開発コードが残ってるし、 バージョン管理に失敗して古いソースをかぶせてしまった感じ。 VS2008で新しくプロジェクトを作ったほうが早い。
WPFアプリケーションをWPFCalculatorの名称で新規作成してそのまま保存して終了。 App,xaml App.xaml.cs Window1.xaml Window1.xaml を上書き。 mytextbox.cs appicon,ico をコピーして既存の項目の追加。 リソースは使ってないのでProperties\の下はそのままでいい。 以下はオプション。省略してもいい。 Properties\AssemblyInfo.csだけProperties\にコピー。 プロジェクトのプロパティで対象のフレームワークを3.0に設定。 アイコンとマニフェストでアイコンをappicon.icoに設定。
843 :
836 :2009/12/15(火) 10:56:01
>>842 詳しい情報ありがとうございます。
その通りにやってちゃんとビルドできました。
マイクロソフトのGUIはこれからこれで行くらしい。ぐらいの知識でちょっと調べてみようと思うんだけど、 WPFアプリで帳票とかの印刷しようとするとどうすればいいか説明している本とかないでしょうか。
洋書はきっついなぁ オライリーは早く和訳してくれないかな
847 :
デフォルトの名無しさん :2009/12/15(火) 18:49:51
すいません。教えてください。 WPFにSystem.Windows.Forms.Screen.AllScreensのようなモニタ情報をすべて取得できるヤツってありますか? SystemParametersにプライマリモニタの情報を取得できるところまでは調べたのですが、モニタ情報を一覧で取得する方法がわかりません・・・
マルチモニタでどうなるのか知らないけど、WMIのWin32_DesktopMonitorとかは?
WinFormsのアセンブリ参照を追加したほうが楽じゃん
下でやってること同じ?だしな
853 :
デフォルトの名無しさん :2009/12/16(水) 04:08:01
FlowDocumentの表現力が一見高いように見えて 実はむちゃくちゃレイアウトの自由度が低くて泣きそうになる かといってInlineUIContainerでGridとかBorderとかTextBlockとか入れちゃうと 「範囲選択してテキストをコピー」できなくなるし…
854 :
デフォルトの名無しさん :2009/12/16(水) 14:49:47
>>847 です。
>>849 >>851 おとなしくアセンブリ参照をいれてFormsを使います。
WPFのクラスでなにかあるのかなーと思いいろいろとサイトをあたって探してみましたが、
めんどくさくなった(ってか無いようですので)ので教えて頂いたようにFormsで取得するようにします。
プライマリ情報はSystemParametersってやつにもってるのになぁ・・・
855 :
817 :2009/12/16(水) 22:32:48
MVVM なアプリを作っています。 ViewModel の処理で時間がかかるため Dispatcher を使用したいのですが、 どうしたら使用すべき Dispatcher を取得できるでしょうか? 現在は App.Current.MainWindow.Dispatcher を使用してるんですが、 これだと、MainWindows 固定なんで汎用的な方法があれば知りたいなと 思いまして。
そもそもVMに時間がかかる処理を記述してるのがおかしいのでは。 普通はありえないと思うんだけど。
VMはAdapterみたいな処理しかしない筈だよね
Main(GUI)スレッドのDispatcherなら Application.Current.Dispatcher 現在のスレッドのなら Dispatcher.CurrentDispatcher. どちらも静的なクラスメソッド
859 :
855 :2009/12/17(木) 00:03:29
>>858 ありがとう。
Application.Dispatcher = GUI のスレッドだったのか。
>>856 >>857 え?そうなの?
時間のかかる処理は、Model が持つべきなの?
Model ≒ データ(今作ってるアプリではシリアライズの対象となる部分)
View = UI
ViewModel = 上記以外の部分(データをごにょごにょするのはここ)
と割り振ってたんだけど、Model の認識が狭すぎた?
そうすると、
1.Model 内で時間のかかる処理を Thread 作って実行
2.処理終わったら ViewModel に通知
3.ViewModel 内で Dispatcher 使って Action 起動
4.その Action 内で OnPropertyChanged 使って View に通知
って処理する必要があるってこと?
よかったら後学のため教えてください。
ぶっちゃけ入力画面ってBind使うとVとVMVにならね? 入力された蓄積されたデータ公開に対してはMVVMになるけどさ
>>859 ModelはフロントエンドのUIやスクリプト操作から独立したデータ操作単位でなくちゃ。
例えば、「発注」という操作は、それが時間がかかろうがどうだろうが、それを利用する
WPFのアプリからでも、SilverlightのWebアプリからでも、WebService経由でも
同じインタフェースで呼び出せる独立クラスにしましょ、という考え方ね。
864 :
855 :2009/12/17(木) 23:52:53
>>861 そうかぁ。最初はそういう認識でやってたんだけど、
ViewModel が、
public object Value{
get{ return _model.Value; }
set{ _model.Value = value; }
}
みたいな記述ばかりになってしまって、
「あれ、俺間違ってる?」
と思って 859 の割り振りにしたんだけど、
ViewModel ≒ Adopter のつもりでいいのね。
>>862 その考え方って汎用な Model と、固有の特性を持つ ViewModel、
両者をつなぐ Adopter として ViewModel って感じ?
でも、そういわれてみると、今作ってるプログラムは Windows プラットフォーム
にべったり依存してて、WPF でしか動かないから MVVM 化する意義が
ない気がしてきた。やばいぞ揺らいできた。
>>863 教えていただいて恐縮だが英語は苦手なので、
あとでゆっくり読む。
865 :
855 :2009/12/18(金) 00:16:48
連投スマソだが、なんで揺らいじゃうかというと、 V-VM 間は ICommand & Binding がそこそこ手間無しでうまくつなげられるんだが、 VM-M 間はめんどくさくね? VM->M 方向は依存してていいだろうから、普通にメソッド呼び出しでOKだと思うけど、 M->VM 方向はやっぱイベント?イベントって、EventArgs のサブクラス作って、 delegate 宣言して、event 宣言してって結構面倒なのよね。 面倒でもこれが王道?これをやるべき? 手を抜くには、INotifyPropertyChanged を実装した Model にするとか、 イベント代わりに Action 使うとかできるかとは思うけど、 そうすると「汎用性ないのに、VM と M 分ける意味ある?」 って気がしてしまう。 それとも INotifyPropertyChanged を実装した Model は「割と普通」 だったりする?それとも俺が知らないだけで楽にイベント実装する方法が あるの? そのあたりがわかんね。 質問ばかりですみません。
結局、依存関係プロパティの実装に終始するはめになるのが VM-M 間の接続だと思ってる。 なんだか楽してんだか苦労してんだかわかんなくなる瞬間。
867 :
855 :2009/12/18(金) 00:39:06
ごめん、 863 の "WPF Line of Business ? Introduction" のモデルのとこだけ
あわてて読んでみた。Model も INotifyProperyChanged でいいんだ?
せっかく教えてくれたのに読むのあと回しにしてすまん。
おかげさまで、M-VM 間もそんなに手間と思わずに分割可能になりました。
残った疑問は、ViewModel ≒ Adopter だとすると、新規に作るプログラムで Model
を分離したとしても再利用できなさそうな場合に ViewModel と Model を分離する
意義があるか?ってことです。
Model を分離しておけば、WPF が廃れても次のUIに適合させやすいであろう
くらいは想像できますが、それ以外になにかありますか?
(
>>860 と同じ考え方になってます)
868 :
デフォルトの名無しさん :2009/12/18(金) 00:47:06
個人的な意見というか勘だが、 いわゆるイベントで通知するときは、用途によって通知したい情報が異なるのだから おそらくEventArgsあたりは、継承ではなくGenericsに似た方式が望ましいのだと思う。 VとVMは悩ましいが、VMあたりは言語表現よりはXAMLで記述する範囲がスッキリ収まると思う。
こんなのを見つけた。特にModel=databaseをラップしたものと勘違いしてる人は多い気がする。 * Model (database) - no, Model is the OO representation of your business entities, including the data that defines them. to say 'database' gives the wrong impression. Database is just a repository to store relational data. * Controller (business logic) - no, Controller is the intermediary between your Model and your View. Controller is the manager which determines what goes on in your website, but the business logic is the definition of what the system is about. * View (what you see + view logic) - absolutely. Model-Controller(ViewMode) で分離するのは使い回しよりもModelのユニットテストに重要だと思う。 小規模なものでテストに問題ないのであれば、コピペコードだらけにしてまで無理して分離せんでも いいんじゃないかな。結局ソフトの品質を維持するための設計技法にすぎないのだから。
結局のところ、Modelだけでアプリケーションのエンジンの部分は完結していなければならない、 ということだね。
ドメインモデル貧血症はまたちょーっと違う意味のような気がしないでもない。 あと VM と M の分離は再利用目的っていより仕様の分離、テストのしやすさが目的だと思ったけど。
「ビジネスロジックの状態管理」と「アプリケーションロジックの状態管理」が ちゃんと整理されてなくてごっちゃになっていると、ロジック全部をModelかViewModelに 押し込んで、もう片方を単なるラッパにして形だけ繕っているようなものを作りがち。 アプリケーションロジックが、本質的にビジネスロジックのサービスを1個か2個呼ぶ 程度で済んでしまうことも結構あるから、そういうときは自信もってViewModelを 薄い層にすればいいんじゃない?
設計に王道なし
VMだけ管理すればいいようにするのがMVVMなの?
MVVMは実際どうなんだろうね RIA Servicesはn層アプリを2層アプリに近づけようとしている そんな流れがくるんじゃないかと思ったりもする
MVVMの定義や例が知りたいならググったサイトを熟読した方がいいような。 2chだとどうしても断片的な解説で終りがちだし。
俺もRIA ServicesでMVVMをどうするかが気になっているんだけど。 まあ、VMは作ると思うけど。
879 :
デフォルトの名無しさん :2009/12/18(金) 23:24:15
VSはDSL近辺で頑張ってもらいたいかな
通常は平面でマウスホバーで膨らむボタンってどうやって作るの? クラシックテーマのメニューみたいな感じ
テンプレート書く
ぶっちゃけIValueConverterを駆使すればVMいらない気がするけど。 まぁレイヤーを綺麗にする意味では良い。
View周りの状態遷移などの管理はVMでやるしかないんじゃないか? IValueConverterは値を変換できない場合の扱いが問題になる。 V-VM-Mで、Vの値を型変換してMにセットできない場合、VMはどちらの値に同期すべきか? V-VMの同期ができないとVの値がVMの値に勝手に変わることが発生しうる(大抵それはうれしくないだろう)。 V-VMは常に同期し、VM-Mは同期は保証しないならこれは防げる。 しかし、IValueConverterで例外が発生しうるとV-VMの同期は保証できない。
884 :
デフォルトの名無しさん :2009/12/19(土) 23:39:16
下記のコードで TreeViewItem の背景が Aqua にならない 理由だれか教えてください。 <TreeView> <TreeView.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Header}" Background="Aqua"></TextBlock> </StackPanel> </DataTemplate> </TreeView.ItemTemplate> <TreeViewItem Header="Foo" IsExpanded="True"> <TreeViewItem Header="Bar"> </TreeViewItem> <TreeViewItem Header="Baz"> </TreeViewItem> </TreeViewItem> </TreeView>
ItemTemplateはItemsSourceを使って自動的に作成されるTreeViewItemに対して適用されるテンプレート。 明示的に作ったTreeViewItemには関係ない。
WMPのプレイビューのリストウィンドウ領域(曲名と再生時間の一覧が表示されてる奴) みたいな感じ(の曲名が長い場合のパターン)っていえば分かりやすいでしょうか、 以下のようなListBoxItemを作りたいと思います。 ・左詰で可変長の文字列を表示するTextBlock ・右詰で固定長の文字列を表示するTextBlock ・両方を表示しきれない場合、左のTextBlockの末尾を省略表示する <DataTemplate> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" HorizontalAlignment="Left" Text="{Binding 可変長}" TextTrimming="CharacterEllipsis"/> <TextBlock Grid.Column="1" HorizontalAlignment="Right" Text="{Binding 固定長}"/> </Grid> </DataTemplate> 幅固定ならこれで左側のTextBlockにWidthを設定すれば実現できるんですが、 WMPのと同様にGridSplitterでListBoxの幅を可変にしたいのです。 なにかうまい方法はないでしょうか?
あ、ちなみにこれも書いてます <ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> </Style> </ListBox.ItemContainerStyle>
左側のTextBlockと右側のTextBlockの幅の合計がListBoxの幅を超えたとき、 ListBoxに横スクロールバーが出てしまうんですよ。 そして右側TextBlockがスクロール先にはみ出てしまう。 そうじゃなくて、幅合計がListBoxを超えたとき 左側TextBlockを末尾省略(TextTrimming="CharacterEllipsis")して ListBoxの横スクロールバーは出さないようにしたいんです。
<Grid Width="{Binding ListBoxのWidth}">?
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"> で出来たわ
>>890 レイアウトに異様に時間が掛かった上に変なレイアウトになりました…
>>891 おおすげー! ほんとだ!
添付プロパティとして使えるとは思わなかったです…
おかげさまで解決です、どうも皆さんありがとうございました。
なんでそこでScrollViewerを参照できるのかってのがまだ良く分かってないんだよな俺
>>893 ScrollViewer.SetHorizontalScrollBarVisibilityがあるから
まぁそうなんだが、暇なんでサンプル <Button Content="Test" ScrollViewer.VerticalScrollBarVisibility="Visible"> <Button.Template> <ControlTemplate TargetType="{x:Type Button}"> <Grid> <ScrollViewer> <ScrollViewer> <ContentPresenter/> </ScrollViewer> </ScrollViewer> </Grid> </ControlTemplate> </Button.Template> </Button>
VerticalScrollBarVisibilityをいろいろ変えてみると面白いかもね
読み取り時のRenderSize.WidthとActualWidthの区別がわけわかめ
FrameworkElement.ActualWidthの実装 public double ActualWidth { get { return base.RenderSize.Width; } }
依存関係プロパティのとこ
901 :
899 :2009/12/22(火) 19:55:38
結局のところ、xamlって必要だったのかね、とふと思うときがある。 xamlだけでなるべくいろんなことが出来るようにするあまり、xaml自体の仕様が 汚くてわかりにくい上、わかりやすかったはずの.Net Fraworkにもキモイしくみが ごちゃごちゃと持ち込まれ過ぎて、system.windowsの体系が複雑怪奇な収拾の付 かないようなもんになってしまったように思えるんだが。 一番キモイのがレイアウトの仕様。デバイスコンテキスト非依存という方向性は いいとして、なんであんなにわかりにくく使いづらい、設計なんだ?
そうだな xamlでかくのはPanelにぺたぺた貼りつけるところまででいい
できるだけでしなくてもいいのがいいところ
さらに言えば、Blendみたいなツールはもっと普及すべきで XAMLをメモ帳でゴリゴリ書く文化が続いていたのが問題 こういうカオスな実装は、見る必要がある時だけ見るべきだ
Blendってそんなに便利なの?
>>907 PNGエクスポート機能がほしいくらい便利よ
>>902 いろいろ実験してみたんだけど
<ContentControl ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ContentControl.Template>
<ControlTemplate>
<ScrollViewer>
<TextBlock Text="aaa" />
</ScrollViewer>
</ControlTemplate>
</ContentControl.Template>
</ContentControl>
<ContentControl ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ScrollViewer>
<TextBlock Text="aaa" />
</ScrollViewer>
</ContentControl>
前者だとScrollViewer.VerticalScrollBarVisibilityが反映されて
後者だと反映されないのはなんでだろう?
ttp://msdn.microsoft.com/ja-jp/library/ms753197.aspx これとは違う仕組みなの?
BlendでFormsみたいにTabIndexを一括で指定する機能があればいいのにと思う
他人の書いたXAMLってめちゃくちゃ読みにくいよな… 元々論理的な構造を表すものではないし、書き方によっては 「処理の途中までXAMLで実現したけど後はViewModelに任せています」とか、 「ViewModelがこの型で返すから、えーっとデータテンプレートを探して…どこだ?」とか 「ココのデータコンテキストは四階層上のアレ?あ、二階層上で変わっている」とか、もうねw。 どうすりゃ他人が読めるXAMLをかけるんだろうか?設計ドキュメントとかどうすればいいんだろうか?
まず//を使えるようにすることだな 場所によってはコメント入れにくくて作業効率ダウン
<!-- -->これは使いにくい
まあ、xamlは従来のForm1.Designer.cs部をわざわざXML形式で表現したような もんなんでしょ? window1.InitializeComponent()の「定義に移動」すると、window1.g.i.csってファイルが 生成されてるけど、本来これに当たるもんなんだろ。RADツールが面倒見るべきもんであって テキストでガリガリ書いたりソースをいじったりするべきもんじゃない。 VSがそこら辺をうまく隠蔽してxamlを直接見る必要は殆どないような形にしないと wpfの普及はありえないと思うんだがなあ。そうなったらそうなったで、なんでわざわざ UIをXMLで表現する必要があるのかっていう根本的な疑問にブチ当たるけれど…。
レイトバインドは楽だけどな 前もリフレクションで似たようなこと出来たけどね
もうちょい作業が軽快に出来るなら文句はないよ VSにしろBlendにしろもっさりしすぎ
>>883 MにIEditableObjectを実装するという手もあるけど。
まぁ、VMで実装したほうがよいinterfaceではあるな。
>>914 そう、本来は隠蔽すべきところ。XAML導入の本来の目的はデザイナとプログラマの仕事の分離だから。
プログラマが決めたViewModelとデザイナが決めたViewがあればくっつけばbindで動く。
…はずだった。MSはその予定だった。
プログラマにとっては部品がないとか、機能が足りないといった問題を解決するため
頭が痛くなるようなXAML構造をひたすらテキストエディタで書くハメになり、
デザイナはその難解なXAMLを理解し"動かしても正しく働く"スタイルを考えなきゃならない。
結局は全く分離できず両者の作業量だけが増える。まさに、誰得
XAMLの複雑さなんてHTML+CSSと比べればかわいいものだと思うが。WPFユーザーはHTML書けない人ばかり?
UserControlやTemplateのおかげで生のHTMLより部品化しやすい(SSIなんて誰もつかわん)し。
ちゃんとデザイン上の細部をStyleに切り出していればUI構造はすっきり見通しの良い状態を維持できるぞ。
>>914 >UIをXMLで表現する必要があるのかっていう根本的な疑問
むしろ条件分岐やループなどのロジックが不要なUI初期化を、あえてコードで表現することのほうが問題かと。
たとえば「すべてのFormのフォントサイズの初期値を一括変換するツールがほしい」なんて言われたときに
C#のコードをparseして書き換えるのとXAMLをparseして書き換えるのではどちらが楽か。
中の人乙
> C#のコードをparseして書き換えるのとXAMLをparseして書き換えるのではどちらが楽か。 どっちが楽かなんてにたようなもんだろ。そもそもソースをパースして書き換えるなんて バカなことしてる時点でアウト。何十枚も画面があるのにすべての画面をwindowから直接 派生して作るなら設計がアホ。きちんとした基底クラスを作ってそこから派生させれば 別にどうって事ないだろ。
922 :
デフォルトの名無しさん :2009/12/23(水) 15:34:42
>>921 で、例外的に「この画面のフォントだけは」とかいう要件が出てきて・・・
そこで初めてUIの分離が必要ってはなしになるんだろ
先祖帰りしてどうする
ぶっちゃけHTML+CSSのほうがノウハウあるから楽勝 XAMLやってるとMSDNをフル印刷したくなる衝動に駆られていやになるわ
CSSならVS2008の手厚い支援があるだろが 周辺機能が足りてないからXAMLは誰得だっつーてるのに何言ってんだか
925 :
デフォルトの名無しさん :2009/12/23(水) 15:53:08
blendでいいじゃん
誰得ちゃんはみんなメモ帳使ってコーディングしてると思っちゃったのか
>>921 XAMLをいじるツールとC#をいじるツール、どちらが作りやすいかという話なんだが似たようなものというのか。
C#のコードを操作できなくてもXMLのDOMを操作できる人間は見渡せば周りにいくらでもいるが。
そもそもツールの作りやすさの話をしているのに、いきなり継承にまで話が飛ぶのも変だし。
そういう用途に継承を使うのも気に食わんが。。
アドホックに解決するのは悪いことじゃないし
他人が作ったひどいアプリを保守することもあるんだから、選択肢は多いほうがいい。
「きちんとした基底クラスから派生しないなんて設計がアホ」と歯ぎしりすることもなく
となりのPython使いを捕まえて「昼飯おごるからXMLいじるちょっとしたコード書いてくれ」と言える。
XAMLはXMLでなくて独自の記法を導入しても良かったかもしれないね。 javaFXなど最近ではそういう流れもある。
> 例外的に「この画面のフォントだけは」 それだけなら、デフォルトフォントを帰るのになんの苦労もいるまい。
> アドホックに解決するのは悪いことじゃないし > 他人が作ったひどいアプリを保守することもあるんだから、選択肢は多いほうがいい。 > 「きちんとした基底クラスから派生しないなんて設計がアホ」と歯ぎしりすることもなく > となりのPython使いを捕まえて「昼飯おごるからXMLいじるちょっとしたコード書いてくれ」と言える。 そういうくだらん目的のためにXAMLって生まれたわけね
>>930 XML標準にのっとっているためツールを書きやすいということが「くだらん」とは思わないが。
そもそもUI定義言語をもっていないUIフレームワークのほうが珍しいんじゃない。
古くはWin32のrcから、FirefoxのXUL、Mac OSXのCocoa、GTKのgrade
どちらかというとWinFormsが異色なんだよなぁ。
Xamlを理解できないのは自分が悪いんじゃなく Xamlがいけないのだと言って八つ当たりしてるように見えるな。 まあ実際触り初めの頃は情報量が少なすぎてWpf糞杉とか思ったけど。
.NET で生産性が高いのに WPF で泥沼にはまったかんじがするから使うきが失せていくのも事実
>>933 みたいにまじめに勉強したやつが馬鹿を見そうで怖い
デザイナーと協業図るような若者は最初っからxamlだろ 別にお前が心配する筋合いじゃない
デザインが絡まなければ泥沼ってほどではないと思うけどなぁ Formsだって凝ったことやろうとすると泥沼とも言える訳だし
WinFormsと比べたら糞の固まりから腐葉土の固まりくらいになったと思うよ。
いまさらFormsは学びたいと思わんな
XAMLを導入して楽になるか? 俺は(ノウハウが足りないという点が解決したとしても) コードが増えるばかり、問題と手間が増えるばかりで全然だと思うが。
そりゃformsベースで考えた仕様を一人で構築すんならxamlなんて弄る必要もないよ 当たり前じゃんそんなの wpfを活かすつもりで考えてグラフィック要素をxaml以外で受け取って構築するの? 大変そうだね頑張って
XAMLに文句を言う人は一度DataTemplateをコードで書いてみるといいよ。笑っちゃうから。
Formsで実現できるLook&FeelやエフェクトとWPFじゃ次元が違うから どっちが楽とか比較がアホらしいわ
943 :
デフォルトの名無しさん :2009/12/24(木) 08:26:24
高次元のエフェクトなんていらん。楽に目的を実現できればそれでいい。 そんな用途もある。
その程度なら使い慣れたWinForms使えばいいじゃん。君、馬鹿なの?
その程度の目的でもWpfは優位だと思うけどなあ。
WinFormsよりはマシだが、もっとうまいやり方があったんじゃないの?って話だろ
未来に期待 それともいいアイデアあるの?
949 :
デフォルトの名無しさん :2009/12/24(木) 20:36:45
>>948 Video見たけど、何するものかわからんかった
どういうものなの?
CAL(Prism)の学習用アプリケーション…だと思ってます。 WPFの複合アプリを作る際のフレームワークと考えていいのかな。
WPFって普及してますか?
正直してるとはいいがたい。 Silverlightでいいじゃんって気がしてる。
Silverlightは同期通信できないから WPFのほうがはやるよ
AJAXも非同期だから、そこを問題にする人は昔より少ないと思う
普及の基準はどこらへんなのか
vectorの新着とかで適当に選んでDLしたソフトがWPF製かどうかとか。
あ、そういえば同期もあったな でも処理が止まるからなぁ
フォーカス移動に絡めたりするときに非同期しかないと死ねる
AIR製のアプリの方がまだ見掛かける気がする。 登場時期の違いってのもあると思うけど。 VS2010が出たらちょっとはかわるのかな。
マルチプラットフォームはAdobeの競合技術のほうが進んでる気がするなあ .NETってLinuxとかMacは実装ちょっと遅れてるでしょ? なのでAdobeの方選ぶ人は少なくないんだと思う。 俺はWindowsしか使わないから割とどうでもいいんだけどな
それをいうならMacやLinuxのFlashもたいがい酷い
大概酷いが、まぁ多少不安定なところに目を瞑ればそれなりに使えるからなぁ… Mono(Moonlight)に比べればまだいいさ。
Adobeは普及してるんだが実装がMSより遙かにクソなのがちょっふじこ
どうでもいいネタだが、モニターを横に寝かせて縦長にすると(もちろん、表示は270度回転して) すごく開発がしやすくなった。特にXAMLのデザイナとコードエディタが広くとれるのがいい。 今度買うときは回転式のにしよ。
ClearTypeがきれいに出ないじゃん
俺はコーディング用には安物液晶しか買わないからチルトしたら見えなくなる
XAMLの縦分割のやつって分離できたっけ?
WPFは起動の遅さがネックだよなぁ。
Formsよりはましじゃないか?
Formsのほうが圧倒的に速いよ。 VSTOでプラグイン作るとよくわかる。
WPFはあと、ほんのちょっと、起動の遅さ、XAMLの使い難さ、VSによる支援の足りなさ、コントロールの不足、 資料/前例の足りなさ、バインド含む処理の重さと、リソースの使用量がどうにかなればなぁ。 色々あるメリット、例えばオサレとかオサレとかオサレとか、あとオサレとかが活かせるんだけどなぁ…
XPまではFormsのほうが早いだろうな ま、リッチなインターフェースだし適材適所だな
Windows7に乗ってるいろいろなアプリはもうWPFばかりなの? MSが移行してるかどうかが重要だな。
ngenは効果が薄いといわれるが、wpfアプリには効果が大きいね。
>>976 へーそうなんだ
いいこと聞いた
なんか比較できる資料とかあったら教えて
FormsのくそだっさいUIから脱却出来るだけでも魅力的なんだからがんばれWPF
>>975 MS謹製でWPF使ってるのなんてあるのか? .NETですらかなり少ないと思うのだが。
WPFはVista以降のWindows専用と考えるとかなりいい環境なんだけど、
Monoがサポートしないのが難点だよなあ。
Formsも事実上使えないから、Gtk#とかwx.NETとか使う羽目になる
VS2010…
Monoをそんなに重要視する必要ある?
Expression EncoderやBlendなんかはWPF VS2010もWPFを使ってる クロスプラットフォームでのWPFの扱いは、SWTみたいな感じになるんじゃないかなぁ
>>981 仕事のほうではさっぱり使わないが、
フリーソフト作ってる身だとC#の快適さ+マルチプラットフォームはかなり恩恵が大きい
MSがWPF使ってるのは、WPFを使わざるを得ないWPF開発環境とその周辺製品だけ
おまえらどんどん作れよ
XAML使うのはパネルまわりだけでいいと思う
>>984 Windows7にはPowerShell ISEというのがあってだね・・・
エッセンシャルWPFを片手にポチポチ勉強始めました。 考え方は非常に理にかなっている様に感じますが、だんだん複雑になってくると こんがらがってしまいます。特にバインディング周りのデータテンプレートのネスト とか階層データテンプレートのあたりは、一応理解は出来るんだけどいざ自分で書いて 見ようとすると、インテリセンスが効かないこともあって全然書けないです。 テンプレートの探索で型によって自動的に適用されるというような、探索のルールも いろいろあって今ひとつよく分からないです。 ここら辺をスパッとわかり易く解説したサイトとかありませんか?
XAMLエディタでインテリセンス使えるようになるだけで なんか大分楽になるような気がする。
XAMLデザイナはまだアルファ版て感じだな。 致命的なバグも残ってるし。
ようつべに色々とWPFやBlendをつかって作ったプログラムを晒している動画があるな。結構、参考になる。
>>991 結局まだその段階ってことなんだよね。
WPF使ってみました!!ってのが売りになるっていうか。
WPF使っててあたりまえ、まではまだまだ先だよねえ。
そもそも商用のコンシューマ向けだと.netが当たり前になってないからなあ
そーかー? 当たり前ってほどではないが、新興のソフトウェアだと結構.NETあるぞ
当たり前より売りになるぐらいの方がよくね?
997 :
992 :2009/12/27(日) 11:10:37
>>995 売りになるっていうのは適当な表現じゃなかった。
たとえば、よくあるTwitterクライアントをWPFで作ってみました(Twitter部分はしょぼいです)
とか
よくある2chブラウザをWPFで作ってみました(ブラウザ部分はWPFの練習なので適当です)
みたいな、WPFで作ってみたことだけが目的のようなのばっかりみたいな。
(*´∀`*)
(*´∀`*)
1000ならジュースでも飲むか
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。