WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part7
レス数が950を超えています。1000を超えると書き込みができなくなります。
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/
0896デフォルトの名無しさん
2010/11/30(火) 19:29:01クラスの依存か、インスタンスの依存かはちゃんと区別しないと。
インスタンスの依存は絶対起きる。これは当たり前。
切りたいのはクラスの依存。
で、そのためには dynamic にやる。
もちろん、コードビハインドで dynamic に VM 操作してしまえば依存は切れる。
けども、極力ユーザーに dynamic なコードは書かせたくなくて、
出来ればデータバインディングを使いたい。
(dynamic はフレームワークの内側に隠ぺいする。)
0897デフォルトの名無しさん
2010/11/30(火) 19:36:480898デフォルトの名無しさん
2010/11/30(火) 19:38:22クラスの依存とインスタンスの依存の違いを教えて。
コマンドでもイベントでも、VがVMのインスタンスを持つのは同じ、
そしてどちらもそのインスタンスに対して呼び出しを行ってる。
0899デフォルトの名無しさん
2010/11/30(火) 19:45:24ViewModel vm;
void ButtonClick(sender, e) {
vm.DoWork();
}
とかやってしまうと、View が ViewModel 参照しちゃってるでしょ、アセンブリ的に。
で、
void ButtonClick(sender, e) {
dynamic vm = DataContext;
vm.DoWork();
}
なら ViewModel の参照要らない。
データバインディングがやってることは後者(に近い)。
0900デフォルトの名無しさん
2010/11/30(火) 19:47:07interface とか継承ベースの強い型付けはテスト用のダミー差し替えがしにくい。
結局、リフレクションとかに頼った dynamic な挙動させたくなる。
でも、一方で、それは利用者の目には触れさせたくなくて、
出来ればフレームワークの内部に隠ぺいしたい。
0901デフォルトの名無しさん
2010/11/30(火) 22:18:14ibentoでいい
0902デフォルトの名無しさん
2010/11/30(火) 22:20:320903デフォルトの名無しさん
2010/11/30(火) 22:21:29後からちまちまコマンドに書き換えても遅くはないだろう。
0904デフォルトの名無しさん
2010/11/30(火) 22:28:08>>899
ちょっと違うけどほぼ前者で
vm = DataContext as ViewModel;
ってやってた。
dynamicって何じゃー
0905デフォルトの名無しさん
2010/11/30(火) 23:03:160906デフォルトの名無しさん
2010/11/30(火) 23:45:39ビルドは通るのに動かないなんて箇所を増やしてメンテできないだろ。
Bindingのエラーも潰すのが大変だっていうのに。
0907デフォルトの名無しさん
2010/12/01(水) 00:30:20as ViewModel したら結局クラス依存するからいまいち。
dynamic は C# 4.0 の機能で、内部的に動的コード生成して遅延バインド。
>>906
効率の意味で言ってるなら、メソッドキャッシュって仕組み持っててそこそこ早いよ。
ビルド時にチェック聞かないという意味で言うと、
どの道データバインディングしてる時点で内部挙動はリフレクション。
ただ、直接ユーザーの目に触れるかどうかって点では、触れない方がよくて、
その点、データバインディング使うとフレームワークの中に隠れてくれるのはありがたい。
0908デフォルトの名無しさん
2010/12/01(水) 01:15:40よく分からんが、ViewがViewModelにクラス依存したらダメなの?
Bindを使ってもdynamicを使っても結局ViewがViewModelにプロパティ名レベルでは依存するけど。
MVVMの動機の一つ「ViewModelの単体テストがしやすい」を考えると
ViewModel->Viewの依存を切っていることだけが重要だと思うが。
この動機で考えると、ViewのコードビハインドからViewModelを叩くこと自体はまったく不味くはないけど
密接に関連してしまい「ViewModelがViewの動作に依存する」になってしまうと不味い。
0909デフォルトの名無しさん
2010/12/01(水) 01:54:16テスト抜きにしても、切れる依存は切りたい。
Java とかが DI とかに走りまくってるのも、静的な結合なくすためだし。
全くダメじゃなくて、程度の問題ではあるけども。
(依存あるコードの方が圧倒的に書きやすいので、そことのトレードオフ。)
0910デフォルトの名無しさん
2010/12/01(水) 02:15:25どのみちVMはView専用なんだしテスト用のVMにだけ差し替えできれば夜露死。
0911デフォルトの名無しさん
2010/12/01(水) 03:07:16実装自体じゃないな、その後の保守。
あと、継承ベースの型チェックはやっぱり依存度強い。
ダックタイピング的な型チェックでも、静的にチェックすることはやりようによってはできるんで、
そういう機能が C# に欲しかったりはする。
0912デフォルトの名無しさん
2010/12/01(水) 03:22:28現状一番だと思うのは >>910 の言うようなインターフェイス挟むやり方。
で、>>911 は今後期待したい機能。
0913デフォルトの名無しさん
2010/12/01(水) 03:35:30そんなもん必要ない
0914デフォルトの名無しさん
2010/12/01(水) 03:36:13単純にrectangleの色を変化させるとかLabelが動く程度なら難しいXML構文とかほとんど覚えなくていいから簡単だなぁ
0915デフォルトの名無しさん
2010/12/01(水) 12:07:530916デフォルトの名無しさん
2010/12/01(水) 12:09:520917デフォルトの名無しさん
2010/12/01(水) 15:50:32XAMLのほうで、Gridの中にRectangle(Name=rectangle1)とButton(Name=button1)を別々におく
で、C#のコードのほう
private void button1_Click(object sender, RoutedEventArgs e)
{
Duration d = new Duration(TimeSpan.FromMilliseconds(1000));
var a = new System.Windows.Media.Animation.DoubleAnimation(0, d);
rectangle1.BeginAnimation(Button.OpacityProperty, a); //ここでButtonのopacity
}
これ実行したら、button1を押すとrectangle1のOpacityが減っていって透明になるんだけど
なんでBeginAnimationの引数がButton.OpacityPropertyなの?
Rectangle.OpacityPropertyだとエラーでるんだけど。
なんでrectangle1のopacityに関するアニメなのに引数がButtonの依存プロパティなの?
どういうこと?
0918デフォルトの名無しさん
2010/12/01(水) 16:03:360919デフォルトの名無しさん
2010/12/01(水) 16:08:46気のせいじゃないの?
http://msdn.microsoft.com/ja-jp/library/ms605728.aspx
0920デフォルトの名無しさん
2010/12/01(水) 16:47:48VC#2010ExpressだけだとSilverlight Toolsインスコできなかった。書いてある通りだけど。
http://msdn.microsoft.com/ja-jp/library/cc838244%28VS.95%29.aspx
Visual Web Developer 2010 Expressの一番基本っぽいのだけ入れたらインスコできた。
http://www.microsoft.com/japan/msdn/vstudio/express/
xamlエディタがパワーアップしたにょろ!
0921デフォルトの名無しさん
2010/12/01(水) 17:00:15storyboad s= new storyboad();
Storyboad.setTargetProperty(なんとか);
Storyboadのstaticメソッド実行しただけなのに
これでなんかsのターゲットプロパティ変わってるし。
複雑怪奇すぎるぞwpf
0922デフォルトの名無しさん
2010/12/01(水) 17:04:170923デフォルトの名無しさん
2010/12/01(水) 19:54:12<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="25" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Content="button1" />
<GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext" />
<Button Grid.Column="2" Content="button2" />
</Grid>
みたいなレイアウトで、スプリッターを左に持って行ったら、
スプリッターの移動は端っこで止まるけど、右のレイアウトがどんどん大きくなっていってしまう…
0924デフォルトの名無しさん
2010/12/01(水) 22:29:32ttp://www.netframeworkdev.com/windows-presentation-foundation-wpf/gridsplitter-drags-out-of-the-window-27306.shtml
0925デフォルトの名無しさん
2010/12/01(水) 23:06:050926デフォルトの名無しさん
2010/12/02(木) 00:23:06確かVisual Basic netでもWPFって使えたよね?
VBでWPFの人気がないのはなんでだろう
0927デフォルトの名無しさん
2010/12/02(木) 00:25:480928デフォルトの名無しさん
2010/12/02(木) 00:30:40世界的にはC#のほうが多く使われてるから
0929デフォルトの名無しさん
2010/12/02(木) 00:35:360930デフォルトの名無しさん
2010/12/02(木) 00:36:310931デフォルトの名無しさん
2010/12/02(木) 00:36:32スタイルとテンプレート合わせたり
スタイルとテンプレートとアニメーション合わせるともうわけわからん。
テンプレートで丸いボタンにして
ストーリーボードとかいうの使ってマウスカーソルが合わさると色が光って
スタイルでそれを全部のボタンに適用
みたいなことしたいんだがどうすればいいんだ。
0932デフォルトの名無しさん
2010/12/02(木) 00:39:30×VB→○VB6
×WPF→○OOP/CLR
だと思う
0933デフォルトの名無しさん
2010/12/02(木) 00:58:01有益な情報を発信できる人がVBしか使えないことはないだろうし、
そのうちでC#よりもVBのほうが好きって人はあんまりいないんじゃないかな
0934デフォルトの名無しさん
2010/12/02(木) 01:01:47一番いいのは、Blend で適当に何か書いてみて
生成されたコード眺めることなんだけどもね。
ほんと、Blend Express(無償)出ればいいのに。
0935デフォルトの名無しさん
2010/12/02(木) 01:06:47VisualStateManager使うのが正しいやり方だけど
正直VSMはBlendないときつい
0936デフォルトの名無しさん
2010/12/02(木) 01:07:51Visual Studio Expressだけしかもってない貧乏人は
アキラメロンってことか。
XAML PADとかいうのも使いづらい品
0937デフォルトの名無しさん
2010/12/02(木) 01:14:55ただ明らかにデザインツール前提で非常にわかりにくい
0938デフォルトの名無しさん
2010/12/02(木) 01:15:18趣味レベルの人向けのを5000円くらいで出してヨ
0939デフォルトの名無しさん
2010/12/02(木) 02:21:56それをVisual Studioのデザイナのツールボックスに追加するのはどうやんの?
0940デフォルトの名無しさん
2010/12/02(木) 02:22:380941デフォルトの名無しさん
2010/12/02(木) 02:25:08リビルドで認識するはず
されない場合はIDEの設定を見てみて
0942デフォルトの名無しさん
2010/12/02(木) 03:31:20<StaticResource ResouceKey="なんとか"/>
このStaticResouceがインテリセンスで候補になーい!
Visual Studioの早期改善が求められる。
0943デフォルトの名無しさん
2010/12/02(木) 03:37:53値が属性と勘違いされて赤い字になるのがイヤ。
0944デフォルトの名無しさん
2010/12/02(木) 04:29:220945デフォルトの名無しさん
2010/12/02(木) 04:34:31<Grid Button.Click="なんとか">
ここにボタンいっぱい配置するコード
</Grid>
↑のButton.Clickがインテリセンスで出てこない。
確かにまだ早い、のかも
でもWPFってVisual Studio 2005のころから(まだテスト段階だったらしいが)あるんだろ
それでもまだ早いって、相当遅れてるね。こりゃ、
0946デフォルトの名無しさん
2010/12/02(木) 09:25:17そのやり方に力入れてないからなぁ・・・
0947デフォルトの名無しさん
2010/12/02(木) 09:26:130948デフォルトの名無しさん
2010/12/02(木) 12:01:23WinForms+VSが神すぎるだけ
そりゃVBやDelphiから続く系統の完成形なんだから比べたら可哀想
0949デフォルトの名無しさん
2010/12/02(木) 13:20:170950デフォルトの名無しさん
2010/12/02(木) 14:18:58コードはC#で
が基本らしいけど
一部の外観はC#のほうで書いたほうがやりやすい。
0951デフォルトの名無しさん
2010/12/02(木) 15:24:58<Button.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="RenderTransform.Angle"
To="90" Duration="0:0:2" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
ボタンにマウスが乗ったら、ボタンが回転するアニメーション作ってみたかった
このXAMLだと、ボタンにマウスがのったらエラーが出る。
どうやって直せばいいんでしょうか。
「プロパティ パス 'RenderTransform.Angle' に解決できないプロパティ参照があります。該当するオブジェクトでそれらのプロパティがサポートされていることを確認してください。」
とかいうメッセージ出てくる。イミフ
0952デフォルトの名無しさん
2010/12/02(木) 15:55:04<Button.RenderTransform>
<RotateTransform />
</Button.RenderTransform>
<Button.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(RotateTransform.Angle)"
To="90" Duration="0:0:2" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
これで動いた。プロパティ指定は"(自身のもつプロパティ).(プロパティの持つインスタンスの型.プロパティ)"という書き方になるらしい。
なんでRenderTransform.Angleって書き方じゃだめなのか俺も解説ほしい。
あと、RenderTransformにRotateTransformを入れとく必要があるぜ。
0953デフォルトの名無しさん
2010/12/02(木) 16:48:30<Button Grid.Row=1/>
これをC#のコードで書いたら
Grid.SetRow(button1,1)
なんか依存プロパティとか難しいこと言ってたけど書き方を少しだけかえただけじゃん。
C言語だとOpen(door)だったのがオブジェクト指向で
door.Open()
になったのと同じ感じがする。
0954デフォルトの名無しさん
2010/12/02(木) 21:20:33それはテンプレート使いこなしてないだけでない?
具体的にはどういうの?<一部の外観、C#の方がやりやすい。
0955デフォルトの名無しさん
2010/12/02(木) 23:49:09using System.Windows.Media.Animation
が書いてない。
いちいち新しいプロジェクト付くる旅にusing書くのめんどくせ。
最初から書けよクソ
0956デフォルトの名無しさん
2010/12/02(木) 23:50:250957デフォルトの名無しさん
2010/12/02(木) 23:52:320958デフォルトの名無しさん
2010/12/03(金) 14:22:400959デフォルトの名無しさん
2010/12/03(金) 14:30:240960デフォルトの名無しさん
2010/12/03(金) 14:31:37みたいなことはやり方を覚えた。
<Button>
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Content" Value="マウスがのってます"/>
<Setter Property="Background" Value="blue"/>
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
これでいいみたいだ。
でもこれだとトリガーでセットするプロパティはマウスが乗ったコントロールと同じものしかできん。
ボタンの上にマウスカーソルがのったらテキストボックスの色が変わる
みたいなことはどうやればいい?
0961デフォルトの名無しさん
2010/12/03(金) 19:43:28Triggerの代わりにDataTriggerでバインディング
0962デフォルトの名無しさん
2010/12/03(金) 19:44:200963デフォルトの名無しさん
2010/12/03(金) 23:34:371対1じゃないとダメか。
0964デフォルトの名無しさん
2010/12/04(土) 14:16:290965964
2010/12/04(土) 14:47:400966デフォルトの名無しさん
2010/12/05(日) 00:59:28<Grid>
<Button Width="100">
<Button.Template>
こういうのがViewで
class person{
int age;
string name;
}
これがModelなの?
ModelViewって何
0967デフォルトの名無しさん
2010/12/05(日) 01:00:100968デフォルトの名無しさん
2010/12/05(日) 01:12:27データバインディングでビューから色々分離する設計パターン。
0969デフォルトの名無しさん
2010/12/05(日) 01:17:52M-VM-V か V-VM-M の方が繋がってる方向的に良くなーい?
0970デフォルトの名無しさん
2010/12/05(日) 01:19:240971デフォルトの名無しさん
2010/12/05(日) 01:27:060972デフォルトの名無しさん
2010/12/05(日) 01:50:390973デフォルトの名無しさん
2010/12/05(日) 14:43:100974デフォルトの名無しさん
2010/12/05(日) 14:56:590975デフォルトの名無しさん
2010/12/05(日) 16:56:20オサレなGUI?そんなの個人でやるもんじゃないでしょ
0976デフォルトの名無しさん
2010/12/05(日) 17:04:19ハイ無理ですね
0977デフォルトの名無しさん
2010/12/05(日) 21:13:14教えて
0978デフォルトの名無しさん
2010/12/05(日) 21:14:22まだWPFがオサレな
0979デフォルトの名無しさん
2010/12/05(日) 21:20:160980デフォルトの名無しさん
2010/12/05(日) 21:32:41突然何を書いてるのかと。
0981デフォルトの名無しさん
2010/12/05(日) 21:34:07まったくだよな。
言いやすさなんだろか?
0982デフォルトの名無しさん
2010/12/05(日) 21:37:51スクリプト言語なども含めて他の言語のGUIアプリ開発環境と比べたら神だよ
最高の完成度なのはWinFormsだが
0983デフォルトの名無しさん
2010/12/05(日) 21:48:58firefoxのguiフレームワーク
あんなわけわからんのでもガンガンいくからな外人は
0984デフォルトの名無しさん
2010/12/05(日) 21:51:21そう、他の言語やら使うと(使わされると)実感するよ。
0985デフォルトの名無しさん
2010/12/05(日) 22:09:00WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part8
http://hibari.2ch.net/test/read.cgi/tech/1291554513/
0986デフォルトの名無しさん
2010/12/05(日) 22:13:481のコメントが前向きだ
0987デフォルトの名無しさん
2010/12/05(日) 22:20:022 .NET3.5 SP1 Betaもリリースされて盛り上がってまいりますた。
3 .NET3.5 SP1 もリリースされて盛り上がってまいりますた。
4 .NET3.5 SP1 もリリースされて盛り上がってまいりますた。
5 .NET3.5 SP1 もリリースされて盛り上がってまいりますた。
6 .NET4.0もリリースされたけど別に盛り上がってはいないよね…。
7 パワフルで柔軟すぎるのが敗因か? 正直ついていけないよね…。
0988デフォルトの名無しさん
2010/12/05(日) 23:11:17あと別に盛り上がってないよね(銀光的な意味で)
0989デフォルトの名無しさん
2010/12/05(日) 23:25:35C#スレでもWPFの質問(回答が付いてる!)見る機会が増えてきて、盛り上がってまいりますた。
0990976
2010/12/05(日) 23:29:29たまんねー
0991デフォルトの名無しさん
2010/12/05(日) 23:43:580992デフォルトの名無しさん
2010/12/05(日) 23:57:31これが荒らしじゃなかったら何だって言うんだw
0993デフォルトの名無しさん
2010/12/06(月) 00:08:25WPFじゃないんだろう
エディタはWPFで作ってるくせにそんなに特別負荷のかかるところとも思えないんだが
0994デフォルトの名無しさん
2010/12/06(月) 00:14:200995デフォルトの名無しさん
2010/12/06(月) 00:18:06Windowsの設定によってはスクロールバーなんか明らかに他の部分と違うし
http://connectppe.microsoft.com/VisualStudioJapan/feedback/details/564203/
単にリリースに間に合わせるためっぽいね
レス数が950を超えています。1000を超えると書き込みができなくなります。