WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part8
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2010/12/05(日) 22:08:33.NET4 もリリースされて盛り上がってまいりますた。
Visual Studio 2010
http://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
前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part7
http://hibari.2ch.net/test/read.cgi/tech/1282479113/
関連スレ
Microsoft Silverlight その7
http://hibari.2ch.net/test/read.cgi/tech/1288613056/
過去スレ
Part6 http://hibari.2ch.net/test/read.cgi/tech/1274423236/
Part5 http://pc12.2ch.net/test/read.cgi/tech/1261879110/
Part4 http://pc12.2ch.net/test/read.cgi/tech/1245384489/
Part3 http://pc12.2ch.net/test/read.cgi/tech/1231506876/
Part2 http://pc11.2ch.net/test/read.cgi/tech/1211453941/
Part1 http://pc11.2ch.net/test/read.cgi/tech/1162950198/
コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
0875デフォルトの名無しさん
2011/03/05(土) 22:13:21.54画像にぼかしかけたり、モザイクとアニメーションを同時にやるとか
そういうのは結構難しいんだよな
0876デフォルトの名無しさん
2011/03/05(土) 22:16:00.80XAMLだけでやろうとしなければそれほどでもなくね?
一旦コードビハインド側でコード書いてXAMLに直せそうならやってみればいいし
0877デフォルトの名無しさん
2011/03/05(土) 22:16:06.68仕組みが分かれば超簡単でクソ速い
0878デフォルトの名無しさん
2011/03/05(土) 22:21:06.22Effectじゃだめじょん?
0879デフォルトの名無しさん
2011/03/05(土) 22:23:02.88http://wpffx.codeplex.com/
ピクセルシェーダのサンプル
0880デフォルトの名無しさん
2011/03/06(日) 08:30:27.44Blend 使えば簡単なんだけどね。
Visual Studio のライセンスで Blend 自由に使えればいいのに・・・
0881デフォルトの名無しさん
2011/03/06(日) 08:33:51.09実行するかどうかはあなた次第
というかそんなに難しいか?
というかそういうtipsサイトってないのかな?
みんなツール依存なの?
0882デフォルトの名無しさん
2011/03/06(日) 16:37:22.47Windowクローズするならイベントハンドラにしないと無理そうなんだと思うんですが、どうよ?
0883デフォルトの名無しさん
2011/03/06(日) 16:45:25.31きっちりMVVM的にやるなら、
PrismのInteractionRequestなりMVVM LightのMessengerなりつかって
VMからViewへメッセージ投げるべき。
View 内に完結してやるにしても、
Button.Click とかのイベントハンドラーで Close() するのはいまいちで、
Button.Command に ApplicationCommands.Close を指定した上で、
CommandBindings で Close() する方がいいと思う。
0884デフォルトの名無しさん
2011/03/06(日) 17:01:13.76インターフェイスを使うのもアリ
interface IWindowService {
void CloseWindow(string windowName);
void ShowWindow(string windowName);
}
例えばこういうのを実装してViewModelのIWindowService型のプロパティに渡しておく
これだとウィンドウ剥き出しすぎるからもうちょっと抽象的な名前のほうがいいかもしれん
メッセージよりはわかりやすくて使い回しも利く
0885デフォルトの名無しさん
2011/03/08(火) 10:09:04.22↓みたいにXMLファイルをバインディングするのと
<MenuItem Header="{Binding Source={StaticResource Strings},XPath=String[@name\=\'menu1\']/@value}" >
↓みたいにショートカットを指定するのを両立させるにはどうしたらいいでしょうか?
<MenuItem Header="File(_F)"/>
0886デフォルトの名無しさん
2011/03/08(火) 10:42:16.42そのXMLファイルをResourceDictionaryのXAMLにすればいい
XAMLが嫌で俺XMLで書きたいなら
XSLTでXAMLに変換するとかXLINQでコードでMenuItem作るとか
メニューなんてアプリ中にいくつもあるもんじゃないんだから、
悩んでる暇があったらそれくらいコード書け
0887デフォルトの名無しさん
2011/03/08(火) 11:59:57.33C#
Window2 w2 = new Window2();
Background = Transparent;
AllowsTransparency = true;
OpacityMask = White;
w2.Show();
XAML
<Grid>
<Image Source="test.jpg" />
</Grid>
これでtest.jpgの画像で白い部分を透過させたいんですが透過しません
jpgもC#で違う画像を指定して入れ替えて使いたいんですが、どう書けば良いんですか?
0888デフォルトの名無しさん
2011/03/08(火) 12:09:23.63コントロールの透明度として使われるというもの。特定の色を透明にするというようなことはできない。
だいたい、jpgは白で塗りつぶしても正確に白にはならないのでそういう用途には不向き。
アルファPNG使いましょう。
0889デフォルトの名無しさん
2011/03/08(火) 12:09:42.540890デフォルトの名無しさん
2011/03/08(火) 12:30:39.620891デフォルトの名無しさん
2011/03/08(火) 12:56:49.740892デフォルトの名無しさん
2011/03/08(火) 13:13:47.250893デフォルトの名無しさん
2011/03/08(火) 13:16:14.570894デフォルトの名無しさん
2011/03/08(火) 13:16:25.750895デフォルトの名無しさん
2011/03/08(火) 14:12:27.70サンプルにゲームがあるんだけど
0896デフォルトの名無しさん
2011/03/08(火) 14:14:27.69Microsoftが「かっこいい見た目」を前面にだしすぎたため
「かっこいいのを作るだけが目的」と誤解されている
C#だけでなく、ザムルも覚える必要がある
勉強ページや勉強本が少なく、自分で考えても車輪の再発明よりむしろ劣化にしかならない
0897デフォルトの名無しさん
2011/03/08(火) 14:26:18.40JavaのJTableは重くならないために中はコンポーネントじゃなくて独自実装になってるというに
WPFのはスクロールしただけで中のコンポーネントの幅をみな再計算するため酷い重さ
0898デフォルトの名無しさん
2011/03/08(火) 14:47:31.55ゲームの描画なんて画像と文字と線を指定位置に描画することさえできれば充分なので
Direct3DやXNAのような低レベルなAPIでも無問題だから
Silverlightならクロスプラットフォームだしブラウザ上で動かせるのでメリットはあるが
WPFでゲームを作るメリットはない
ベクターベースのゲームならメリットはあるかもしれないけどね
0899デフォルトの名無しさん
2011/03/08(火) 14:53:18.36またオサレGUIかw
0900デフォルトの名無しさん
2011/03/08(火) 15:12:57.980901デフォルトの名無しさん
2011/03/08(火) 15:34:31.13WPFの次のバージョンではSilverlightのホスティングに対応するらしいから、
いずれはWPFのUIといえばウィンドウいっぱいにSilverlightHostコントロールを貼り付けただけになるんだろうなw
0902デフォルトの名無しさん
2011/03/08(火) 15:41:54.19>WPFのUIといえばウィンドウいっぱいにSilverlightHostコントロールを貼り付けただけになるんだろうなw
それでいいと思うよw
0903デフォルトの名無しさん
2011/03/08(火) 15:45:03.420904デフォルトの名無しさん
2011/03/08(火) 15:48:22.00SilvelrightはActiveXコントロールとしてホスティングできるから、
フルセットの.NETからSilverlightのVisualTreeを操作できるように橋渡ししてやればいいだけ
現在のSilverlight4+.NET4でも実現は難しくないはず
0905デフォルトの名無しさん
2011/03/08(火) 16:33:17.890906デフォルトの名無しさん
2011/03/08(火) 20:30:00.92みたいにx:Keyを付けないと
private void Button_Click(object sender, RoutedEventArgs e)
{
var resource = (ResourceDictionary)Application.LoadComponent(new Uri("Dictionary1.xaml", UriKind.Relative));
grid.Resources = resource;
}
のように動的にリソースを入れ替えても瞬時に切り替わるけど、
x:Keyを明示的に付けてStaticResourceとして参照してると切り替わらない(DynamicResourceならOK)。
x:Keyを付けないときはDynamicResourceと同じ扱いになるのかな?
0907デフォルトの名無しさん
2011/03/08(火) 20:57:37.77正確には、アクションゲームみたいなフレームごとに描画しなおすタイプのゲームに向かない。
WPFはイベント駆動で画面再描画することを前提にパフォーマンス最適化されてる。
0908デフォルトの名無しさん
2011/03/08(火) 22:54:21.15実際、資料が少ないのが厳しいな
WPF解説してるサイトとかほとんどないし、とっかっかりが無い
Googleで「WPF 入門」で検索しても、1ページ(10件)目に出てくるのは
上から順に
企業サイト
http://www.atmarkit.co.jp/fdotnet/chushin/introwpf_index/index.html
http://msdn.microsoft.com/ja-jp/library/ms771449(v=vs.80).aspx
http://codezine.jp/article/detail/910
http://codezine.jp/article/detail/928
個人サイト
http://d.hatena.ne.jp/hilapon/20100520/1274374572
http://z80a.blog48.fc2.com/blog-category-38.html
http://blogs.wankuma.com/kzt/category/2039.aspx
これくらいしか有用なページ無いもんな
2ページ以降は似たようなちょっとした情報ばかりだし
0909デフォルトの名無しさん
2011/03/08(火) 23:00:22.77WPFやSLのお作法でいきなり作ろうと構えるとそれだけで負担になるので
とりあえずは名前付けてイベントハンドラ使って従来の方法で触ってみるのが
一番だよ。
その中で従来の方法で書いたコードをバインドなどWPFやSLのお作法で
書き直すとどうなるかってアプローチが一番いいと思う
大体の人はWinFormになれてるんだし
0910906
2011/03/08(火) 23:22:56.90ここによると
>また、リソース システムは、リソースが変更された場合に、そのリソースにバインドされている要素プロパティが自動的に更新されて変更を反映するようにします。
とあるので、リソースを入れ替えたら勝手に反映してくれるわけだ。
でもx:Keyを付けたリソースをStaticResourceでバインドしてると勝手に反映してくれないので、
入れ替えるリソースファイルにx:Keyの付いたリソースがあるならDynamicResourceでバインドしておく。
こんな理解でおk?
0911デフォルトの名無しさん
2011/03/09(水) 01:51:46.76WPFで一番戸惑ったのはポトペタでGUI作りにくかったことだな
Blend抜きだとタグを直接書いた方が楽だなんて何処にも書いていないし
0912デフォルトの名無しさん
2011/03/09(水) 02:43:59.31MVVMの流儀だと、どう実装したらいいの?
例えば、接続されているハードウェアを列挙して、アイコン付きの
ラジオボタンあたりで選択させたいみたいな状況です。
(NVIDIAコントロールパネルのディスプレイ周り等)
0913デフォルトの名無しさん
2011/03/09(水) 03:34:31.940914デフォルトの名無しさん
2011/03/09(水) 18:24:06.57で例外がでるんですが、ストーリーボードのリソースはXAMLから検索してくれるんじゃないんですか?
<Storyboard x:Key="Story">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="SB">
0915デフォルトの名無しさん
2011/03/09(水) 19:09:05.30値を整数で変化させるにはどうしたらいいですか?
0916デフォルトの名無しさん
2011/03/09(水) 19:12:05.41数値としてならConverter書いた方がいいのかな?
文字で欲しいのならStringFormat
0917デフォルトの名無しさん
2011/03/10(木) 00:18:44.42http://www.infoq.com/jp/news/2011/03/WinForms-ERP
0918デフォルトの名無しさん
2011/03/10(木) 00:26:07.76WPFはまあ・・・あれだがSLはいいと思うんだけどなあ・・・
やっぱりFlashとかの方が歴史が長いだけに開発者が多いので
厳しい目で見られるってことなのかね?
0919デフォルトの名無しさん
2011/03/10(木) 00:36:10.64というだけの記事だろ
0920デフォルトの名無しさん
2011/03/10(木) 00:38:15.63相変わらずの超翻訳で安心した
0921デフォルトの名無しさん
2011/03/10(木) 00:51:50.99切り捨てられたらショックだろうな
逆にWPF切り捨てならWinForms叩きでもっと荒れただろうな
別にただそれだけのこと
0922デフォルトの名無しさん
2011/03/10(木) 19:40:01.79MediaElement.SetSourceで出来そうだけどSilverlight限定?
0923デフォルトの名無しさん
2011/03/11(金) 17:28:01.86見つかりません
ご存知の方いませんか
0924デフォルトの名無しさん
2011/03/15(火) 21:48:43.64Xamlとコードの両方に共通化したい部分がある場合はCustomControl化してしまったほうがいいの?
デザイナーによる支援が貧弱になるのは痛いけど、UserControlを継承して…ってのはなんか違う気がする。
0925デフォルトの名無しさん
2011/03/15(火) 22:02:16.25直接URL渡せばWMPで再生できるなら再生できるよ
>>924
XAMLも一緒ならUserControlでいい
カスタムコントロールはXAML(テンプレート)とコードを分離できるコントロールを作るためのもんだ
0926デフォルトの名無しさん
2011/03/15(火) 22:33:15.690927デフォルトの名無しさん
2011/03/15(火) 23:01:20.41UserControlの継承はやり方がよくわからんです。
継承元(一元化したい部分を含んでいる)はコードのみで書かないとうまくいかない感じです。
0928デフォルトの名無しさん
2011/03/15(火) 23:06:02.25・コードをビヘイビアとして再利用できないか
を検討してね
0929デフォルトの名無しさん
2011/03/15(火) 23:15:44.07上が一番簡単そうだけど管理が煩わしそう。
下は今回のケースなら適用できそうです。
XAMLはResourceとして括れるだけ括ってみます。
0930デフォルトの名無しさん
2011/03/15(火) 23:19:12.21プレイヤーを起動すれば?
0931デフォルトの名無しさん
2011/03/17(木) 01:07:26.98WPF攻略しないの?
0932デフォルトの名無しさん
2011/03/17(木) 01:55:35.10めんどうだけどBlendの方のビヘイビア使うべきか。
0933デフォルトの名無しさん
2011/03/17(木) 04:04:36.19情報も古いままだし、初心者とって紛らわしい使えないサイト
0934デフォルトの名無しさん
2011/03/17(木) 08:56:08.38これテンプレに入れといてもいいかもしれない。
0935デフォルトの名無しさん
2011/03/17(木) 22:14:40.140936デフォルトの名無しさん
2011/03/18(金) 02:28:51.68Expression Blendとかいうのがなかったらきつすぎるから。Visual StudioだけでやるならWindows Form のほうがいいし。
ごく一部の専門家が使うイメージだ。
解説ペーjなんて作っても
WPFやるならExpression Blendを買おう。
これ買ったこと前提ですすめます
なんてやったら、そもそもそんなの買うようなのは解説ペーjなんてなくてもMicrosoftのページでいいだろうし全然よんでもらえないし
かといってExpressionなしでやるのも
なにこれ?XAMLでアニメーションとか依存プロパティとかテンプレート作るのコード複雑になりすぎてちょっと無理ある
でもアニメーションとか使わないんだったらWindows Formでよくね?ってなるし。
0937デフォルトの名無しさん
2011/03/18(金) 02:45:02.420938デフォルトの名無しさん
2011/03/18(金) 06:33:26.31WPFでも、Formsで実現できるレベルの事しかしないならBlendなんか要らん。
つか、使ってもたいして楽にならんよ。
0939デフォルトの名無しさん
2011/03/18(金) 09:46:01.12バインディングの失敗とは違って
制御はコードにあるんだからどうとでも
好きにできるだろ
0940デフォルトの名無しさん
2011/03/18(金) 12:45:08.22レイアウトエンジンの有無
半透明のサポート
の方がよっぽど需要。
これらはBlendが無くても十分役立つ。
0941デフォルトの名無しさん
2011/03/18(金) 15:04:29.42バインディングの設定自体はVSのデザイナでも十分やれるけど、
BlendがVMのデータを適当に自動生成してくれて、プレビューしながらUI作れるのは便利
0942デフォルトの名無しさん
2011/03/18(金) 15:39:53.35BlendはVS2010以上に重いし
0943デフォルトの名無しさん
2011/03/18(金) 16:54:47.300944デフォルトの名無しさん
2011/03/18(金) 17:37:18.250945デフォルトの名無しさん
2011/03/18(金) 17:50:23.39・・・・そうなったらおれも使う
0946デフォルトの名無しさん
2011/03/18(金) 19:21:02.770947デフォルトの名無しさん
2011/03/18(金) 20:56:55.34全く分けてる意味無いと思う
こんなもんプログラム書けない人が使えるわけないわ
ビヘイビアとかInteractionRequestとか、どんどん本末転倒な方向に進んでる
0948デフォルトの名無しさん
2011/03/18(金) 21:54:58.290949デフォルトの名無しさん
2011/03/18(金) 22:08:22.83デザイナーはDesign使ってろってこった。
0950デフォルトの名無しさん
2011/03/18(金) 22:16:13.60デザイナ向けツールはあっても良いけど、VS単体でプログラマが作業できるようにならないと、WPFなんて絶対流行らんわ。
0951デフォルトの名無しさん
2011/03/18(金) 22:20:45.10そんなことできる会社が日本のどこにある
0952デフォルトの名無しさん
2011/03/18(金) 22:23:03.400953デフォルトの名無しさん
2011/03/18(金) 22:32:24.18結局XAMLでプログラミングしてるだけじゃん
0954デフォルトの名無しさん
2011/03/19(土) 11:02:58.840955デフォルトの名無しさん
2011/03/19(土) 11:03:42.620956デフォルトの名無しさん
2011/03/20(日) 04:01:40.82<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="RenderTransform.X" Storyboard.TargetName="LayoutRoot">
<EasingDoubleKeyFrame KeyTime="0" Value="{Binding ActualWidth, ElementName=LayoutRoot}"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
こんなふうにValueに動的に値をいれたいんだけど、Storyboard内ではBindingは使えないらしい。
ウィンドウサイズによって値が変わるので動的にやりたいんだけど何かいい方法ないですかね?
0957デフォルトの名無しさん
2011/03/20(日) 21:26:04.30MSDNではBlurEffect使えって書いてあるけど
元絵とブラーさせたやつを重ねるのはメンドクサイ
何か良い方法はありませんか?
0958デフォルトの名無しさん
2011/03/22(火) 09:29:10.940959デフォルトの名無しさん
2011/03/22(火) 12:03:42.970960デフォルトの名無しさん
2011/03/22(火) 15:43:52.280961デフォルトの名無しさん
2011/03/22(火) 16:10:17.04添付プロパティとして親のサイズに対する比率(0-1)で要素の位置を指定できるPanelを自作するとか
ピクセルシェーダならそういう条件での移動は簡単にできるので、移動させるだけならさすがにやりすぎだと思うけど
他にもエフェクトかけたりするならついでに移動もピクセルシェーダでやってしまう手もある
>>957
DropShadowEffect{ShadowDepth=0}
0962デフォルトの名無しさん
2011/03/22(火) 16:25:39.63なるほど、カスタムパネル、ピクセルシェーダー。目から鱗です。
Canvas並の機能のGrid軽量版をつくろうかと思ってたのでまずはカスタムパネルやってみます。
0963デフォルトの名無しさん
2011/03/22(火) 17:32:43.80MVVMで作成しようとしています。
このとき、MainViewModelのコマンドからダイアログ(HogeDialog)を開くにはどうするのがいいんでしょうか。
(1) HogeDialogを先に作り、HogeDialogの中でHogeDialogModel(ViewModel)を作る
(2) MainViewModelでHogeDialogModelを先に作り、HogeDialogを後付けする
どちらにしても、HogeDialogをMainViewModel内で直接newすると
VMがVに依存することになってしまうので、HogeDialogはMainViewModel以外の場所で作る必要がありますよね。
それを考えると、(2)の方が(1)よりも構造がシンプルでVM間のデータの受け渡しも楽になると思うのですが
webでよく見かけるのは(1)の方ですよね。
そもそも単体テストを楽にするのが目的なんだから、(2)のようにVM同士を依存させるのは避けて
必要なものだけInteractionRequestなどを通して間接的に渡した方がよいということなんでしょうか。
0964デフォルトの名無しさん
2011/03/22(火) 19:13:17.24DropShadow使ったらいいのか…
ありがとう、できました。
0965デフォルトの名無しさん
2011/03/22(火) 20:17:33.370966デフォルトの名無しさん
2011/03/22(火) 20:25:14.960967964
2011/03/22(火) 20:52:21.59下のと比べると薄い…
ttp://msdn.microsoft.com/ja-jp/library/system.windows.media.effects.outerglowbitmapeffect.aspx
0968デフォルトの名無しさん
2011/03/22(火) 22:08:50.87Storyboadで回転しながら拡大しつつ色を変化させて移動
なんてDirectXとかでやったらちょっとコードがごちゃごちゃするけどXAMLならスッキリかける
0969デフォルトの名無しさん
2011/03/23(水) 11:54:36.84そういうのはストーリーボード相当のものを自前で実装するからごちゃごちゃしませんよ。
0970デフォルトの名無しさん
2011/03/23(水) 13:23:06.19Direct3D相当の抽象化レイヤを自前で実装して直接ハードを叩けばごちゃごちゃしないね
0971デフォルトの名無しさん
2011/03/23(水) 13:28:29.18アニメーションエディターは2DだとFlashやDirectorやアフターエフェクツから取り込んだりね。
ほとんどのところではベクター画像とりあつかってないよ。
3DだとMayaとかMaxのデータをそのまま再生できるようにしてりしてます。
0972デフォルトの名無しさん
2011/03/24(木) 15:28:35.140973デフォルトの名無しさん
2011/03/24(木) 15:49:25.440974デフォルトの名無しさん
2011/03/24(木) 16:07:45.700975デフォルトの名無しさん
2011/03/24(木) 16:11:40.07それと同じこと
レス数が950を超えています。1000を超えると書き込みができなくなります。