まず、この質問はWPFとWinFormsに関するものではないことに注意してください。
マイクロソフトがXAMLを発明して、コンパイル可能なC#コードを生成する「古い」アプローチを採用するようになった最高の利点は何ですか。
私の印象では、他の開発者は多くの欠点を見つけているようですが、Microsoftはそれを受け入れました。つまり、私には見られない利点があるということです。私が行方不明になっていることを説明してください。
まず、この質問はWPFとWinFormsに関するものではないことに注意してください。
マイクロソフトがXAMLを発明して、コンパイル可能なC#コードを生成する「古い」アプローチを採用するようになった最高の利点は何ですか。
私の印象では、他の開発者は多くの欠点を見つけているようですが、Microsoftはそれを受け入れました。つまり、私には見られない利点があるということです。私が行方不明になっていることを説明してください。
回答:
XAMLの最大の利点は、宣言的な方法でUIを記述できることです。つまり、「ボックスを作成し、サイズを変更する」とあまり言わないでください。「ボックスを作成してから、このサイズです」と言う
XAMLが優れている2番目の場所は、実際にバインディングを利用することです。例えば:
<Button IsEnabled="{Binding IsBusy}">
ビューモデルでは、ビジネスに取り掛かり、IsBusyをtrueまたはfalseに設定できます。変化すると、Buttonの有効状態が自動的に切り替わります。
より複雑な例として:
<ListBox ItemsSource={Binding Options}>
<ListBox.ItemsTemplate>
<CheckBox Checked="{Binding IsChecked}" Contents="{Binding Name}"/>
</ListBox.ItemsTemplate>
</ListBox>
この例では、リスト(オプション)にバインドし、すべてのアイテムのリストボックスにアイテムを作成しています。ここですばらしいのは、リストにアイテムを追加または削除すると、UIがリストの状態に自動的に同期されることです。各アイテムのチェックボックスをクリックすると、基になるオブジェクトがUIに一致するように自動的に更新されます。このような強力なツールを使用して、WinFormsアプリのすべてのイベントを接続するのにかかる時間をほんのわずかの時間でUIをハッキングしました。
一般に、これはすべてUIを宣言形式で記述できることを意味し、これは生産性を大幅に向上させます。ただし、これにはコストがかかります。コードが一般化されなくなるため、WinFormsアプリのパフォーマンスが向上する可能性があります。しかし、データグリッドに40,000行を表示するようなことをしているのでない限り、XAMLを使用しても大きな速度低下に気付くことはないでしょう。
また、他のUIライブラリがXMLなしで同じ目標を達成することにも言及する必要があります。たとえば、QTはJsonを使用します(http://labs.qt.nokia.com/2009/05/13/qt-declarative-ui/)
私はXAMLをUIの「中間言語」と見なしています。任意のプログラミング言語で、さまざまなプラットフォームで使用できます。ユーザーインターフェイスの言語、プラットフォーム、デバイスに依存しない説明を可能にします。
XMLを使用すると、膨大な数のパーサーと解析ツールがサポートする形式でメタデータが提供されます。少なくとも理論的には、これにより、誰でも任意の言語を使用してメタプログラミングを行うことができます。
実際には、XMLを使用すると、よりオープンな標準のように見えます。これはブラウザのような単なるマークアップですが、解析は簡単です。
これらは実際のメリットですが、実際には、XAML以外ではあまりにも多くのことが行われているため、メリットはそれほど重要ではありません。
"<While Condition="a == true"><Print>Hi!</Print></While>"
誰でも?それは明らかにひどいです。UIの表現が異なるのはなぜですか。
XAMLは、XPSやWFなどのGUIだけでなく、単にオブジェクトの階層を表すように設計されています。XAMLを使用してアプリケーションを構築すると、リッチインターネットアプリケーション(RIA)やリッチデスクトップアプリケーションを提供するのに役立ちます。
テキストベースのGUIの宣言表現としてXAMLを使用すると、MS開発ツールが、HTMLなどの業界で標準と見なされている他のテクノロジーに一歩近づきます。
XAML(Windowsフォーム経由)の主な機能は次のとおりです。
XAMLを使用すると、Scalable Vector Graphics(SVG)画像と変換を描画できます。ベクターグラフィックスの利点の1つは、品質を失うことなく任意のサイズに拡大縮小できるため、ユーザーのコンピューターの解像度をあまり気にする必要がないことです。
一般に、Windowsフォームは、ウィンドウのサイズ変更とGUIサーフェスの変更(新しいコントロールが追加または削除された場合など)の結果として、コントロールの自動配置のサポートが制限されていました。コントロールは、GUIまたはプログラムコードを通じて各コントロールの行と列の値を明示的に指定することによって配置されます。XAMLではこの動作が可能ですが、スタックコントロールコントロールとラップパネルコントロールを提供することで、この問題を解決するより簡単な方法が導入されています。
XAMLでは、ネストを使用して、XAMLで直接、既存のコントロールから新しいコントロールを構築できます。スタックパネルと一緒にボタンコントロール内にイメージコントロールをネストして、新しいタイプのボタン、つまり画像付きのボタンを作成できます。このコントロールはXAMLで作成されるため、Windowsフォームの場合のように、それを使用するために別のdllを作成する必要はありません。例:
<Button Width="90" Height="40">
<StackPanel Orientation="Horizontal">
<Image Source="Yes.png" Width="14" Height="14" />
<TextBlock Margin="5,1,0,0" Text="Yes" />
</StackPanel>
スタイルとテンプレートを使用すると、CSSやHTMLの機能と同様に、いくつかのレベルでコントロールの外観をカスタマイズできます。手続き型プログラミングは必要ありません。1つの変更をGUI全体に反映できます。
XAMLを使用すると、Windowsフォームでは使用できない高度なデータバインディング手法を使用できます。1つのコントロールを別のデータ値にバインドすることもできます。
XAMLは、他のフレームワークで使用または置換できる組み込みのナビゲーションフレームワークを提供します。実際、WPF、Silverlight、およびXAMLは、Windowsフォームでは正確に実現できないMVVMパターンを利用するように設計されています。
XAMLの導入により、ファイルの背後にあるコードを、インターフェース設計ファイルからより大きな対象者に分離することができました。もちろん、一部の名前の依存関係はまだ存在しています。ただし、XAMLはコンパイラーを必要としないXMLおよびHTMLと同様のテキストベースの宣言型言語であるため、インターフェイスの設計者は個別のXAMLファイルを作成して、後でファイルの背後にあるコードと統合できます。これは、プロジェクトの手続き型コードとしてGUIが密結合されているWindowsフォームの場合とは異なります。XAMLを使用しているデザイナーは、Visual Studioを離れ、MS Expression Blendツールを使用してGUIを作成することもできます。MS Expression Blendは、プログラマーではなくデザイナー向けに作成されています。
XAMLは、サードパーティのツールを必要とせずに、アニメーションおよびビデオ表示のための高度なネイティブテクニックを提供します。
XAMLは、ASP.NETおよびWindowsフォームを使用するよりも、WindowsベースのソフトウェアとWebページの開発をより密接にすることを目的としていました。SilverlightとWPFはどちらもXAMLを使用します(多少の違いはありますが、エクスペリエンスの大部分は転送可能です)。
SDK for XAMLには興味深いコントロールが含まれており、サードパーティのツールを使用せずにウィザードやストーリーボードスタイルのプレゼンテーションをサポートすることができます。
XAMLはデータを簡潔ですが、人間と機械が理解できる方法で記述します
理論的には、すべての新しい言語はあなたが学ぶ必要があるものです。非常に多くの人々は、言語の豊かさと見なされているため、多くの/複数の言語を話すことを好みます。これは存在し、自然言語に関連していますが、プログラミング言語には必要ありません。
私は自分で、バッチファイル、perl、lua、python、c ++、c#など、かなり多くの言語でプログラミングをしています。全部覚えていますか?いいえ、別の言語を使用して切り替えることはできますが、時間がかかります。今すぐC#で書き込み、C ++に切り替えるだけで、プログラミング言語とその「方言」に応じて、NULL、null、nil、またはnullptrを簡単に混同できます。(C ++通常、C ++管理)
xamlはxmlの「方言」です。学ぶのは簡単ですか?他のフォーラムでの非常に多くの質問に基づいて、私はノーと言うでしょう。
C#を置き換えるものですか?番号。
答えは非常に明白です-うまく設計された(C#-たとえばデータ型リフレクション)、パフォーマンスがよく(C ++のように)、スクリプト可能(C#スクリプト、C ++ / clingまたはそれ以上)の1つのプログラミング言語を使用したいと思います
現在、C ++とC#は私のニーズを完全には満たしていませんが、xamlは奇妙なデータ形式です。これは、学習する価値があるとは見なしません(ラップするだけで、開発者の目から隠します)。
最後に、自然言語(音声)とプログラミング言語(人工的に構成された言語)を同じ1つの言語に再結合します。これにより、コミュニケーションやプログラマーが使用できるようになります。これは、将来、プログラミング言語「アーキテクチャー」で使用されます。または「設計パターン」が文書化され始めます。
- XAMLを使用すると、Scalable Vector Graphics(SVG)画像と変換を描画できます。
- ...
XAMLは確かにwinformsに比べていくつかの新しい改善された機能を導入しているので、それを使用することを検討する価値があります。ただし、最終的にユーザーインターフェイスを完全に動的にする場合は、xamlを同様のランタイムコードに置き換える必要があります。
結局のところ、ユーザーインターフェイスは簡単に使用できるはずです。つまり、コントロールの最小セットを意味します。コントロールは似ています(キャンセル、OK、ショートカット、同じ幅/高さなど)。つまり、UIは多かれ少なかれ自動生成できます。
ところで、xaml C#コードに直接埋め込むことは可能ですか?メタデータ、文字列、コメント?
だれもそれを使用することを想像しなかった方法で、言語を誤用したり乱用したりすることは、時々整然としています。Perlはこれをたくさん行いますが、私は不可解な構文よりも何とかよりクリーンな構文を好みます。しかし、C#とxaml-C#を選択しました。
XAMLを他のアプリケーションで使用できるという利点があります。良い例は、内部(コードビハインド)がVisual Studioでコード化されている間に、デザイナー/アーティストがBlendでXAMLを開発できることです。
マイクロソフトでは、UIマークアップとコードビハインドを個別に試み、Blendなどのツールを使用して、プログラマー以外のユーザーがUIをコーディングできるようにしたと思います。
しかし、多くの店はBlendを持っていないので、私たちの多くにとって、それは車輪の再発明のように見えます。
これは、Windowsクライアントに近い人が購入した8ポイントです。
多くの回答で私が見ない1つの点は、xamlがwpf desginプリンシパルのコアを促進するということです。視覚的表現と視覚的ロジックを分離します(実際には、これはトリガーなどに限定されますが、カスタムコントロールがないと仮定すると、これで十分なことがよくあります)。これはまた、他の人がバインディング、アタッチされたプロパティ、および通常のC#コードではより詳細になる可能性があるその他のメタデータの表現構文で指摘しているように、相性が良いです。
より個人的な意見として、xamlの良い点の1つは、単にコードを生成するだけでなく、コントロールの視覚的な階層を表すことです。あるコントロールが他のコントロールとどのように関連しているかが一目でわかります。