1 名前:デフォルトの名無しさん [2009/01/09(金) 22:14:36 ] あたらしいGUI FW、WPFについて語るすれ。 .NET3.5 SP1 もリリースされて盛り上がってまいりますた。 Visual Studio 2008 ttp://www.microsoft.com/japan/msdn/vstudio/ Microsoft .NET Framework 3.5 Service Pack 1 ttp://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=ja WPF Toolkit - October 2008 Release ttp://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=15598 関連スレ Microsoft Silverlight 2.0 その3 ttp://pc11.2ch.net/test/read.cgi/tech/1227324813/ 過去スレ 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/
232 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 20:29:19 ] idlがあるならmidl.exeとtlbimp.exeでdll作れよ
233 名前:231 mailto:sage [2009/02/17(火) 21:11:56 ] >232 ちょっと調べて知恵をつけて midl /newtlb effects.idl してみたんだけど、effects_i.c, effects_p.c, dlldata.cしかできない・・・ これ以上は初心者板向けになりそうだから、一週間たってwpfwmp.zipが手に入っていなかったら まじめにCOMを勉強するわ。
234 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 21:44:31 ] >>224 殺しちゃうのかよw
235 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 21:46:25 ] ScrollViewer のインスタンスの垂直スクロールバーが 一番下まで来たかどうかを調べる方法って、どうすればいいんでしたっけ? やりたいことは ScrollViewer に対して、コントロール内で PageDown() メソッドを 呼んだあと、もうこれ以上ページを下におろすことができないかどうかを知りたい。 でもなんだかうまくいきません。 ぐぐっても出てこないし、歯がゆい。 もしご存知でしたら教えてください。。。。。。
236 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 22:51:36 ] WPF 勉強中なんですが、 Windows に Image を張って、 そこに、jpg 画像ファイルを読み込みました。 この画像ファイルに、文字列を書き込みをしたいんですが、 どのようにしたらよいでしょうか? Image.Source から、DrawingContext を生成してなるのかな と思いますが、やりかたがわかりませんでした。
237 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 22:54:21 ] 画像にじゃなくて画像ファイルに?
238 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 22:56:16 ] 画像に、です すいません
239 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:02:28 ] >>235 HorizontalOffset/VerticalOffsetとScrollableWidth/ScrollableHeight
240 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:02:51 ] >>236 なんでもかんでもGraphcsで描くWinFormsとは根本的に考え方が違うんだよな 特殊な場合を除いて基本的にDrawingContextは使わない DrawingVisual作ってImageDrawingやGlyphRunDrawingを追加して RenderTargetBitmap.Renderが正当かな
241 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:09:31 ] Canvas使うとかAdorner使うとか色々あるぜ
242 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:15:13 ] いずれにしても元のImageSourceに直接描くのは無理 >>236 じゃないけど,最終的にRenderTargetBitmap以外の方法はあるのか知りたい
243 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:24:25 ] WPFのコントロールテンプレートで迷ってしまいました、どうもラジオボックスの連動がうまく行きません。 <Window.Resources> <Style TargetType="RadioButton" x:Key="Test_Style"> <Setter Property="RadioButton.FontSize" Value="20"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="RadioButton"> <StackPanel> <RadioButton x:Name="tet" Content="!" /> </StackPanel> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter TargetName="tet" Property="IsChecked" Value="True" /> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter TargetName="tet" Property="IsChecked" Value="False" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources> <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> <RadioButton x:Name="RadioButton_1" Style="{StaticResource Test_Style}" Content="RadioButton__1" IsChecked="True" /> <RadioButton x:Name="RadioButton_2" Content="RadioButton__2" IsChecked="False" /> </StackPanel>...
244 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:26:56 ] >>242 ImageDrawingは? 何をもって最終とするのか知らんが
245 名前:242 mailto:sage [2009/02/17(火) 23:30:47 ] 元の画像に文字を合成したImageSourceを得たいんでしょ その完成したImageSourceを作る段階
246 名前:>>189 mailto:sage [2009/02/17(火) 23:30:52 ] やりたいことは、普通にフォームにラジオボックスに2つ張った状態を目標にしています。 通常ならどちらか一方がチェックされれば、もう片方はチェックが外れるようにしたいです。 この方法では一度ならラジオボックスのチェックがどちらか一方に付くようになるのですが、 もう一度チェックしなおすと両方がチェックされた状態になってしまいます。 プロパティの値も実際に見てみたのですが、一度だけ成功していますが、それ以降は値が変化していないということになりました。 Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded MsgBox(Me.RadioButton_1.IsChecked & vbCrLf & Me.RadioButton_2.IsChecked) End Sub true:False Private Sub RadioButton_2_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles RadioButton_2.Click MsgBox(Me.RadioButton_1.IsChecked & vbCrLf & Me.RadioButton_2.IsChecked) End Sub False:True Private Sub RadioButton_1_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles RadioButton_1.Click MsgBox(Me.RadioButton_1.IsChecked & vbCrLf & Me.RadioButton_2.IsEnabled) End Sub True:False (ここで見た目は両方ともチェックされた状態になってしまうが、値は希望通り)
247 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 23:32:07 ] >>246 コレハンミスです。 よろしくお願いします m(_ _)m
248 名前:236 mailto:sage [2009/02/18(水) 00:01:49 ] RenderTargetBitmap でいけそうです。 ありがとうございました。 >>245 そのとおりです。 238は俺じゃないんだが・・・。 書き込んだのを忘れてるんだろうか。
249 名前:244 mailto:sage [2009/02/18(水) 00:08:35 ] DrawingImageだった 名前が紛らわしいよまったく
250 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 00:23:35 ] DrawingImageは保存できなくね?
251 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 00:25:49 ] >>248 その年でもう健忘症か? ほっとくと中川みたいになるぞ 病院いってこい
252 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 00:37:56 ] 保存は条件じゃないっしょ
253 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 03:22:56 ] コードでResourcesを設定して、XAMLからStaticResourceとして読み込んでいるんだけど デザイナ側はコードで設定される事を知らないので >読み込みで問題が発生しました >デザイナを読み込む前に修正しなければならないエラーがドキュメントに含まれています。エラーを修正してからデザイナを再度読み込んでください。 と言われてデザイナが読み込まれない。 このケースだとXAMLでリソースを定義してDynamicResourceとして読み込ませておいて、InitializeComponent後に設定するのが正攻法だと思うけど <Window.Resources> <app:Test x:Key="Test"/> <Window.Resources> この定義方法だと、勝手にインスタンス作ろうとして引数0のコンストラクタがないとエラーになってしまう。 デザイナにコード側で設定されるって事を教えるにはどうすべきなのでしょうか。
254 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 09:30:38 ] ObjectDataProvider使えばコンストラクタに引数渡したり、メソッドの結果にバインドできるのか。
255 名前:231 mailto:sage [2009/02/18(水) 12:53:18 ] >232さんの助言のお陰で、わりと上手く行っています。Adam Nahanさんからの返信はまだ ありませんが、どうやら自力でできそうです。>232さん、ありがとうございました。
256 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 13:11:13 ] WPFでGDI風にテキスト書かせたりするのはどうすればいいですか? ちなみにxamlはつかってません C#でしこしこ書いてます
257 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 13:21:49 ] コンテキスト.DrawString("a")みたいなの? OnRenderをオーバーライドすればそれっぽいことができるけど激しく非推奨 要素を置いていくだけで同じことできるしパフォーマンスも良くないし何よりWPFらしくない
258 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 13:25:51 ] 初心者でよくわかってないんです どうすればいいでしょう? データ更新が多いのでできるだけ早く描画したいのですが
259 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 13:31:38 ] 頻繁にOnRenderで更新するのは最悪 普通に要素を置いていったあとはそれらのプロパティの変更だけですませて できるだけ要素の入れ替えは行わない 画面に表示するだけならDrawing系の要素を使うと軽い
260 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 13:41:41 ] うー Drawing系の要素って何?orz
261 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 13:47:07 ] msdn.microsoft.com/ja-jp/library/aa970683.aspx このへん読め 理解できないなら理解できるようになってから気にすればいい
262 名前:>>243 mailto:sage [2009/02/18(水) 15:42:07 ] 何の参考にもならないと思いますが、何とか希望通りの動きをするようになったのでメモしておきます。 <Window.Resources> <ControlTemplate x:Key="RadioButtonControlTemplate1" TargetType="{x:Type RadioButton}"> <StackPanel> <Label Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type RadioButton}}, Path=IsChecked}" /> </StackPanel> </ControlTemplate> </Window.Resources> <StackPanel x:Name="LayoutRoot" VerticalAlignment="Center" HorizontalAlignment="Center"> <RadioButton Content="RadioButton" Template="{DynamicResource RadioButtonControlTemplate1}" /> <RadioButton Content="RadioButton" Template="{DynamicResource RadioButtonControlTemplate1}" IsChecked="True" x:Name="radioButton" /> </StackPanel>
263 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 15:42:50 ] わからん Drawing系の要素、なんて言葉どこにもでてこない textBlockとかいうのつかったほうがはやいってことか?
264 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 15:47:13 ] System.Windows.Media.Drawingクラス(の派生クラス) 画面に描画するにはDrawingVisualを使う
265 名前:235 mailto:sage [2009/02/18(水) 18:03:32 ] >239 レスありがとうございます。 各プロパティで試してみたのですが、うまくいかない原因は別にあったようです。 実際にスクロールバーの制御をおこなうときに、スクロールバーが表示されていなかったという 何ともお粗末な原因でした。 穴があったら入ってゆっくり眠りたい気持ちです。
266 名前:デフォルトの名無しさん mailto:sage [2009/02/18(水) 23:41:20 ] なんでwpfのスレが伸びまくるんだろうか?
267 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 00:04:13 ] いいドキュメントがないから
268 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 02:58:30 ] 本もほとんどないしな
269 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 10:17:53 ] 決定版が一冊出ればそれでいいんだけどな
270 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 15:11:22 ] 決定版ドキュメントが一冊出れば飛び付くんだが、最近の有力なエンジニアは 自ブログの充実ばかりで、書籍の執筆熱が冷めている上に、インターネットに 押されている出版社も支援が薄い。 出し惜しみ+買い控えの無限ループ → 書籍出版の衰退
271 名前:>>189 mailto:sage [2009/02/19(木) 15:58:19 ] Blendが自動でコード補助とかしてくれたらわかるけど、ヒントすら出てくれないからヘコしんどい
272 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 16:16:14 ] MSDNが使いづらい 探したいものがあって検索してもなかなか見つからない 数十分かけてやっと見つかったと思ったら大雑把にしか書いてなくて迷うこともある >>271 ヒントでねーわ選択画面ねーわで結局本片手にやるはめになるよな
273 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 16:20:57 ] IntelliSenseが最強の教師って状況はおかしいよな。
274 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 21:38:21 ] Silverlightのドキュメントなんかもっと酷いよ
275 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:10:32 ] MSDNで直接探すのは、どこに書いてあるか見当がつく場合ぐらいだなぁ 特定のクラスについて調べたいとか、この辺に探してるやつがある筈 と思う時ぐらい 調べる対象が漠然としてる時は、ググった方が早いね。
276 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:43:21 ] >>275 クラス名でググった方が早くね? www.google.co.jp/search?q=System.Diagnostics
277 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 23:48:27 ] WPFをMicrosoft Blendで作るのと、Visual Studioで作るのって何が違うの? 分裂したメリット、デメリットが判らない。 自分的にはVisual Studioではコード候補が出るから何とかなる気もする、 Blendは即コンパイル。 こんな感じ?
278 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:06:39 ] プログラマーとデザイナーが同時に作業できるようにってことだったと思うけど タダで配るならともかくこれは完全に失敗だよな
279 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:18:31 ] Blendがもっと手軽にコントロールテンプレートを弄り倒せるツールだったらヤル気がでた。
280 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 01:28:46 ] >>277 多分Blendに存在価値がないのが問題 どう見たってプログラム素人が手ェ出せるUIじゃないだろ・・・
281 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 02:25:33 ] >>280 xamlを意識しなければそれなりに使えそうだけどなぁ ただ、デザイナじゃないからblendは使いこなせなかったけどw とりあえず、フォーカスするとキモい挙動をする(グラデーションが動く)ボタンなら簡単に量産できると思う。 (センスのない自分が嫌になれるよ!)
282 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 07:43:01 ] 色とかかえたりするにはまぁいいんだけどね・・・ 何つーかもうちょっと全体的に使いやすくなって欲しいんだよなぁ FLASH用のツール作ってた人なんだろ、これ作ったの。
283 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 08:52:06 ] xamlとC#の変換ツールないですか? いきなりxaml使えといわれても何やってるのかよくわからないものは気持ち悪くてさわれない
284 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 09:37:19 ] >>283 それを言うならxamlとC++の変換じゃないの? C#から使うものだけど実装自体をC#でやってるわけじゃなかろう。 俺は詳しくないからxamlをパースしたあとC#に変換しているのか C++で直接動かしているのか詳しくは知らないが、 283はC#のメモリ管理が内部で何やってるかわからんから気持ち悪いとか言って わざわざC++で書いたりするわけじゃないんだろう? ああいう記法でラッピングした以上制約が色々あるから気になるならWindowsFormでやればいいし そこまで潔癖に気にするやつが使う代物でもないと思う。
285 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 10:11:12 ] むしろaspxだろうJK
286 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 13:02:03 ] >>284 これはひどい > C#のメモリ管理が内部で何やってるかわからんから気持ち悪いとか言って CGの動作原理を理解すれば気持ち悪くなくなる 同様に、XAMLとC#の対応関係を理解すれば、XAMLに対する気持ち悪さも消えるだろう 対応関係はDependencyPropertyの解説などを見れば、だんだんわかってくるが、 てっとり早く理解する為に変換ツールが欲しくなるのも理解できる けど、変換ツールは見たことないな ライブラリはXAMLをパースして、(ILを出力せずに)直接オブジェクトを生成しちゃってるし
287 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 13:53:48 ] XAMLがC#のコードとして表示されてるのを見たことある気がするんだが、 VisualStudioにそういう機能なかったっけ?
288 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:08:35 ] アプリケーション定義のxamlならobjフォルダにC#コードが出力されるけど。
289 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:15:58 ] <x:Code> ``` </x:Code> のことを言ってたりする? これならXAMLの中にそのまま記述できるけど?
290 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 14:34:26 ] >>288 ああ、それだった。たいした情報はないのな。
291 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 16:03:42 ] >290 StartupUriのxamlをフレームワークのAPI使ってロードするだけのコードだからね。
292 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 21:04:52 ] >>283 はXAMLがどうC#と関連づけられるか分からないから気持ち悪いと言っているんであって、 >>284 が言うようなC#のメモリ管理なんて言ってないだろうが。 XAMLで書けることはC#で書けるんだから、C#がわかるなら気持ち悪いなんて事は無いだろうに。
293 名前:284 mailto:sage [2009/02/20(金) 22:05:03 ] すまん、俺がボケかましてただけだった。 milcore直接たたいてるのはWPFでXAMLじゃなかったわな。 直接たたいてるとしたらアンマネージドだからああいう物言いになったと。 メモリ管理どーのってのはあくまでも例え。286は例えとわかってくれているが292には通じんかったようだ。 GCは挙動わかっててさえ気持ち悪いとか非効率とかよく言われるものなのに、 まずGC積んでるC#自体を気持ち悪がらないのにXAML程度を気持ち悪がる理由がわからんって事。 例え悪くてすまんな、低脳なんで。 ただ、XAMLで書けることはC#で書けるというのは大抵書いてあることだけど そのままパースして翻訳されてると俺は思ってないし、 そう考えると実際に内部で何やられてるかわからんと言う意味で 283が気持ち悪がってるのかなとは思い直した。
294 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 22:12:51 ] milcoreは最終的な一番低いレベルの描画に使ってるだけ XAMLをパースしてるのはフレームワークのマネージコード
295 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 22:20:51 ] WPFは最終的な描画以外は全部C#で書かれてるよ SilverlightはアンマネージC++にごくごく薄いマネージドの皮をかぶせただけ
296 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 22:28:05 ] >>294 ,295 把握した。
297 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 00:04:48 ] マイクロソフトの人がこのスレみて反省してくれればいいのだが
298 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 01:52:02 ] マネージからmilcoreたたければなー
299 名前:デフォルトの名無しさん [2009/02/21(土) 09:39:09 ] 299
300 名前:デフォルトの名無しさん [2009/02/21(土) 09:39:45 ] 300
301 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:20:19 ] Dispatcher.InvokeするとTargetInvocationExceptionが起きるんですが、どうすれば回避できるのでしょう?
302 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:25:45 ] 中身(InnerException)は?
303 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:27:50 ] ごめんなさい、知識なさ過ぎて答えられません InnerExceptionとは何でしょう?
304 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:48:19 ] ああ、TargetInvocationExceptionっていうのは呼び出した先でエラーが起きてるってことなのですか? 検索してもさっぱりわかりませんでした それでは調べてみようと呼びだしてるメソッドの中身をtry catchで囲んでみたらなぜかエラーが起きなくなりました なにがおきてるんでしょう?
305 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:56:08 ] try{ ほにゃらら }catch(Exception e){ MessageBox.Show(e.InnerException.ToString()); } してみたら?ていうか、キャッチしなかった場合にデバッグ環境で表示されるダイアログでも InnerExceptionは見れるけど。
306 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 22:58:33 ] ごめんなさい、エラーおきてました 時間なくてあせってて 原因もわかりました お騒がせしました お付き合いありがとうございました では
307 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 23:14:02 ] e.ToString() したら InnerException も連鎖的に出してくれたような
308 名前:デフォルトの名無しさん mailto:sage [2009/02/22(日) 23:23:18 ] TargetInvocationExceptionが起きると出してくれないんですよ だから何が起きてるのかさっぱりわからなくてパニくりました はずかしい
309 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 01:12:03 ] 違うスレッドで起きてる例外だからスタックトレースとしては連続してないってだけだろ。 ちゃんと例外の発生したスレッドというかメインスレッド側で処理しておけ。
310 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 11:55:11 ] Blendがうんこ過ぎてメモ帳以下ですが、私の使い方が間違っているものだと思うので質問します。 BlendでBindingするときに、勝手に全ての対象へ「x:Name」を定義してしまうのですが、 デフォで親参照とかにする設定などありますか?
311 名前:デフォルトの名無しさん [2009/02/23(月) 12:51:58 ] xamlっていったんC#のコードに変換してからコンパイルされるんですか? コードビハインドのコンストラクタにあるInitializeComponent()の定義を参照 すると、window1.g.csみたいなファイルが生成されて、xamlを置き換えた windows forms時代のようなコードが見られるんですが。 そうやってるなら、いっそのことxamlなしでc#オンリーの選択肢もほしい。 RADツール使うなら、xamlだろうとc#だろうと、かわらんし。 >>283 激しく同意だ。xamlはとにかく裏で何やってるのかさっぱりわからんのが 気持ち悪い。 さっきのInitializeComponent()メソッドなんて定義がどこにもないのに、 使えることになっている。自動生成されたcsファイルいじったらどう反映される んかねえ。 だいたい、プログラムのエントリポイントはいったいどこにある んだ??? いくらなんでも隠蔽しすぎなんじゃないのかね、wpfは。
312 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:03:25 ] 根本的に間違ってる XAMLはC#のコードに変換しているわけではない WPF自身が実行時に直接XAMLをパースして組み立ててる window1.g.csはXAMLを読み込む処理を呼び出して 読み込まれた要素を対応するC#のフィールドに代入するためだけに生成される
313 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:11:51 ] C#だけでも作れるよね? xaml使ったのとC#だけのもの、初期化処理は違うとしてもほぼ等価な動作すると考えていいの?
314 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 13:25:07 ] それはもちろんそうだけど RADで生成するからxamlだろうとC#だろうとかわらんというなら わざわざC#を吐かせるメリットがない 言語別に対応しないといけないし動的に読み込むこともできないし 人間が読んだり修正したりするのも難しいし RADが人間による修正に対応するのも難しい
315 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 19:33:27 ] >>311 XAMLからコントロールの論理ツリーが生成される。〜.g.cs のC#コードはそれを参照するため。 それと、ASP.NETと違ってコントロールへはIDによるアクセスじゃなくなった。 > xamlはとにかく裏で何やってるのかさっぱりわからんのが気持ち悪い。 裏とか表ってw これはW*Fの基本理念の一つで、「1つのプログラム言語やコードで何でもでき、そして何でもやる。」 という旧態のプログラマ的な思想から脱却して、高度にモデル化され、そして機能と役目の分担が 進んだ結果、こう変化したんだよ。 >>313 できるよ。 過去の資産であるWindowsFormライクなプログラミングスタイルも継承しているからね。 過去の資産=過去の頭脳w ・・・過去の技術者を一気に冷たく捨てないところがマイクロソフト。
316 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 19:38:21 ] すごく… 胡散臭いです
317 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 20:08:53 ] UI専用の言語とその構造に基づいたデザイナという組み合わせは、C#のコードをドキュメント化 されていない流儀で自動生成するブラックボックスなデザイナよりも圧倒的に優れていると思う。 Windows Formsは昔のVisual Basicのノリから抜け出せていなかった。 それに、コンテナの配置はxamlでやって、コントロールの動的生成をコードでやって、とか、 役割分担のさじ加減をプログラマがコントロールし易い(Windows Formsでもできるけど)WPF の魅力だと思う。 xamlはxmlベースの構造的な言語だから、不明瞭なのは直接の子要素がChildrenプロパティなのか Contentsプロパティなのか、くらいだけで、同等のコードをC#で書くのってとんでもなく楽。
318 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 20:28:48 ] いやおまえら、partial classくらい知ってろよ。 2.0からずっと、UIとイベントの定義は一緒だろうが。 WindowsFormsとXAML、どっちも同じ。ASP.NETも。 XAMLはC#で全く同じものが書ける。これは最終的に一つのクラスになるから。 複数のソースで一つのクラスが定義できるのがpartial class。XAMLのように 言語が異なるのは既にASP.NETでやっている。
319 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 20:38:49 ] ここまでの議論の参加者で*.xaml.csでpartial クラスの機能が使われている事を知らない奴が いるとは思えないんだが・・・
320 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 20:53:59 ] 時代はpartial !! じゃなくてw C#使ってるならそのメカニズムくらい分かってる筈だよ。 つーか、Formデザイナからだけでなく、XML構文によるUI要素の 名前空間、クラス、プロパティ、イベントの表現が、公式フォーマットの XAMLドキュメントという定義で可能になったことが新しい。
321 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:02:35 ] そうそう。UI定義の方法は、Windows Forms時代には、デザイナが勝手な流儀で勝手にやっていただけ。でもxamlはXMLベースで標準の構造的な仕様が定まっていて、その構造の上にデザイナが 乗っかっている。だから、ブラックボックスで気持ち悪い、とはならない。
322 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:29:15 ] 以前に書き込んだC#+WPF+ARToolkitPlus+DShow.NETでミクさん大放出を、 Windows Media Playerの視覚エフェクトにしてみた。WMPのSDK的に視覚エフェクト プラグインはC++で作ってオンフレームでデバイスコンテキストに描画するように なっているので難儀したけど、C#板でCOM InterOpについて助言してもらってどう にかC#+WPFだけで全部やれた。 動画:www.nicovideo.jp/watch/sm6242828 ソース:sites.google.com/site/augmentedrealitytestingsite/download のWMPEmitMiku.zip なんかもうコンセプトがカオスになってきて、WPF板的にスレ違いっぽくなってきたので これで終わりにするわ。後の進展(あるか分からないけれど)に興味がある人がいたらニコ動の マイリストでも時々見てくれ。
323 名前:デフォルトの名無しさん [2009/02/23(月) 21:36:00 ] > window1.g.csはXAMLを読み込む処理を呼び出して > 読み込まれた要素を対応するC#のフィールドに代入するためだけに生成される いっている意味がよくわからないんだけれど、 window1.g.csはイベントのシンクとかも処理しているように見えるんだが。 フィールドの代入だけなんて代物じゃないんじゃないの? xaml全体がシンタックスシュガーかと思っていたよ。 そんなとこまで隠蔽して、
324 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:40:22 ] 323が隠蔽された!
325 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:49:21 ] window1.g.csがやってること ・リソースのXAMLを読み込む(Application.LoadComponentに丸投げ) ・ロード後,CLRフィールドに要素を代入 ・イベントハンドラのアタッチ
326 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 21:59:07 ] C#だってILに変換される。それを隠蔽とは言わない。 期待される動作が一通りで、その通りの動作をするのならば、より低いレベルが隠蔽されていても 問題にはならない。必要に応じて高レベル、低レベルを使い分ければ良い。 ブラックボックスが気に食わないのは、ただ一通りの動作を期待できないからで、それは知識不足 のせいだと思うんだけど。
327 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:13:06 ] XAMLをAPIでパースして、親子関係にのっとり それぞれのUI用クラスを生成してるだけだろ? どこが隠蔽されてて気持ち悪いのかぜんぜんわからねーよ。
328 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:22:48 ] バインディングとかがイベントで実装されている事を知らずに、謎のコードが自動生成されている とか勘違いしているのかなあ。 俺が気持ち悪く感じるのは、XAML記述上の直接の子要素がどのプロパティ(ChildrenとかContentとか) に対応するのかXAMLを見ただけでは分からない事だけだ。まあ確かにこれだけは気持ち悪い。
329 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:14:26 ] 以前アップしたXAMLを使わないWPFの例 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8924.txt 一番下のXAMLのWindowsタグをPageに変えて、utf-8でhoge.xamlで保存。 IEで開けばloose xamlでも動く。
330 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:42:06 ] >>322 ARToolKitはC++でライブラリをラップして、 DLL作ってから参照してるのかいな?
331 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:57:40 ] >>330 その部分はbrains-N-Brawnさんの仕事。 ``ARToolKitPlus - modified to be a DLL and export C-style functions that can be pInvoked from C#'' www.mperfect.net/wpfAugReal/ その部分だけpure .netじゃない。そのDLLをPInvokeするラッパはbrains-N-Brawnさんのを拝借 していてそれはpure C#(PInvokeがpureかは別として)。それからDShow.Netも(COM InterOpが pureかは別として)pure C#。そんでもって3D出力は、NyARToolkitなんかがDirectX SDKに含まれる Managed Direct Xを必要とするのに対しこちらはWPFの3Dを使用しているのでまあ敢えて言えば pure(標準の) C#。 というわけで、上記DLLを除いて、オリジナル・非オリジナルのコードいずれも完全に標準のC#と .NET 3.5(WPF)で書かかれている。まあ、NyARToolkitなんかはARToolkitのコードをマネージコード に真面目に移植しているので、どっちがpureかというのは微妙だけど。でも、3D出力がWPFである点 によって、とっつき易いアプローチになっている面は確実にあると思う。というか、それで無理やり 関連付けてこのWPFスレに投稿しているわけなんだが。
332 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:58:25 ] ごめん、改行が変になって読みにくくなった。