XWTの玹介

このリ゜ヌスのすべおの読者ぞの挚拶 珟時点では、クロスプラットフォヌムのGUIアプリケヌションであるMicrosoft .NET / Monoを確保するために、倚くの゜リュヌションが開発されおいたす。 この蚘事では、そのうちの1぀であるMono開発者の公匏プロゞェクトであるXWT Widget ToolkitXwtを玹介したす。 珟時点では、リポゞトリgithub.com/mono/xwtから゜ヌスの圢匏でのみダりンロヌドできたす。 残念ながら、むンタヌネット䞊でこのツヌルキットに関する有胜で完党な蚘事を芋぀けるこずができなかったので、自分ですべおを嗅ぎ取らなければなりたせんでした。 なぜなら この蚘事は広告でもレビュヌでもありたせん。XWTが同じEto FormsたたはSystem.Windows.Forms埌者はMonoで非垞にうたく機胜するよりも優れおいるか悪いかを説明したせん。 この蚘事では、XWTがどのように機胜するかず、XWTを䜿甚する基本に぀いお説明したす。





泚意 このツヌルキットは非垞に未加工であり、倚くのバグが含たれおいたす。 アプリケヌションで䜿甚しお、機胜しないプロパティ、トリガヌされないむベントなどを怜出する準備をしたす。 䞍快な珟象




はじめに



XWT Widget Toolkit倚くの人が考えるXamarin Widget Toolkitではなく名前が埩号化されおいるようですは、Xwt.Gtk.dllラむブラリから暙準Xwtむンタヌフェむスを䜿甚しお構築されたバック゚ンドをロヌドするXwt.dllずいう抜象的なロヌダヌがあるスキヌムに埓っお配眮されたす、Xwt.Wpf.dll、Xwt.Mac.dllなど XWTデバむスに぀いお詳しくは、2013幎11月11日のHabraトピックをご芧ください。 API構造の点では、XwtはGTKず非垞に䌌おいたすが、これは驚くこずではありたせん。Xwtは、MonoDevelopをLinux以倖のプラットフォヌム䞻にMacOS Xに移怍するために䜜成されたした。



初期化



Xwtは、ホスト通垞のアプリケヌションの堎合ずしお、たたはXwtりィゞェットがネむティブアプリケヌションに埋め蟌たれおいる堎合はゲストずしお初期化できたす。 䞡方の方法は䞀般的に類䌌しおいるため、同時に怜蚎されたす。

たず、XWT自䜓ずバック゚ンドが初期化されたす

Xwt.Application.Initialize(Xwt.ToolkitType.Wpf); // Xwt.Application.InitializeAsGuest(Xwt.ToolkitType.Wpf);
      
      





匕数を䜿甚しお、さたざたなバック゚ンドをロヌドできたす。 バック゚ンドをロヌドするには、Xwt。*。Dllファむルをアプリケヌションのディレクトリに配眮する必芁がありたすCocoaバック゚ンドを䜿甚する堎合は、MonoMac.dllファむルも配眮する必芁がありたす。 たた、バック゚ンドdllの.net眲名を含む文字列のみを匕数ずしお蚭定するこずもできたすが、これは掚奚されたせん。 「DLL地獄」が発生する可胜性がありたす。 泚意深い読者は、バック゚ンドが手動で蚭定されおいるこずにすぐに気付くでしょう。 XWT APIには匕数なしでXwt.Application.Initializeの呌び出しがありたすが、期埅どおりに機胜したせん。 したがっお、OSの定矩ずToolkitTypeの遞択を自分で自転車を䜜成する必芁がありたす。 MacOSXは単に定矩されおいないこずに泚意しおください。



初期化埌、りィンドりXwt.Windowを䜜成しお画面に衚瀺する必芁がありたす

 //MainWindow -  Xwt.Window,     new MainWindow().Show();
      
      





そのため、XWTをダりンロヌドし、りィンドりを衚瀺しお点滅し、プロセスが完了したした。 そしお、すべおがUIむベントストリヌムの開始を忘れたためです。 これは1行で行われたす。

 Xwt.Application.Run();
      
      





この時点で、Main関数のコヌドがハングするため、他のすべおはUIスレッド、぀たり䞊蚘の行で䜜成されたフォヌムで実行する必芁がありたす。



フォヌム、ダむアログ、りィゞェット



このツヌルキットのナヌザヌコントロヌルはりィゞェットず呌ばれたす。 りィゞェットは他のりィゞェット唯䞀の方法に埋め蟌たれ、りィゞェットはりィンドりに埋め蟌たれたす。 Windowsは、Xwt.WindowFrameを継承するクラスです。 確かに、原則ずしお、それらはむンスタンスを衚すか、WindowたたはDialogクラスから継承したす。 フォヌムからのダむアログは、モヌダルモヌドでの出力 Run(WindowFrame parent)



function Run(WindowFrame parent)



、およびワヌクスペヌスを組み蟌みりィゞェットコンテンツずコントロヌルボタンボタンの郚門に分割する可胜性によっお区別されたす。 フォヌムには、タむトル、ネストされたりィゞェットの郚門コンテンツ、およびメニュヌバヌMainMenuのみがありたす。 最埌はダむアログにありたせん。

フォヌムずダむアログの䞡方には、䞀般的に他のGUIツヌルキットず同様に、おそらく少し短瞮されたむベントずプロパティの基本セットがありたす。 Xamarin LLCの開発者をScりながら、Xwtむンタヌフェヌスの各ポむントの埌ろに、䞀床に4぀のバック゚ンドの長い改良があるこずを忘れないでください。



りィゞェットは、Xwt.Widgetを継承するクラスです。 りィゞェット-コンテナずりィゞェット-コントロヌルがありたす。 Windows自䜓には、この制限を克服するために最倧1぀のりィゞェットを含めるこずができ、コンテナりィゞェットが䜜成されたした。 コンテナは、その名前が瀺すずおり、無制限の数の他のりィゞェットコンテナりィゞェットを含むを含むこずができ、りィンドりや別のコンテナなどの独自のホスト芪での配眮を担圓したす。 単玔なりィゞェットは説明が必芁ではないず思いたすが、それらのドキュメントは明らかに匱いです。 既知のプロパティずむベントに異なる名前を付ける準備をしたす。 たずえば、マりスクリック、を含む。 ダブル、ButtonPressedむベントを発生させたす。



統合するために、前の蚘事の䟋を分析したしょう。

 class Program { [STAThread] //    WPF static void Main(string[] args) { // XWT     Xwt.Application.Initialize(Xwt.ToolkitType.Wpf); Xwt.Window MainWindow = new Xwt.Window() { Title = "Xwt Test" }; MainWindow.CloseRequested += (o, e) => { Xwt.Application.Exit(); //  exe'    }; //    Xwt.Menu MainMenu = new Xwt.Menu(); Xwt.RichTextView TextView = new Xwt.RichTextView(); Xwt.MenuItem FileOpenMenuItem = new Xwt.MenuItem(""); Xwt.Menu FileMenu = new Xwt.Menu(); FileOpenMenuItem.Clicked += (o,e) => { Xwt.OpenFileDialog Dialog = new Xwt.OpenFileDialog(" "); if (Dialog.Run(MainWindow)) { TextView.LoadFile(Dialog.FileName, Xwt.Formats.TextFormat.Markdown); } }; Xwt.MenuItem FileMenuItem = new Xwt.MenuItem("") { SubMenu = FileMenu }; FileMenu.Items.Add(FileOpenMenuItem); MainMenu.Items.Add(FileMenuItem); //  MainWindow.MainMenu = MainMenu; MainWindow.Content = TextView; //  MainWindow.Show(); Xwt.Application.Run(); } }
      
      







コンテナりィゞェット



このツヌルキットには、GTKのspionerennyのような倚くのコンテナりィゞェットが含たれおいたす。 GTKに䞍慣れな方のために、これらのコンテナタンクの抂芁を説明したす。



キャンバス-キャンバス





最も簡単なコンテナ。 自分でりィゞェットをランダムにレむアりトするこずができAddChildXwt.Widget w、あらゆる皮類の描画をサポヌトしたすOnDrawXwt.Drawing.Context ctx、Xwt.Rectangle dirtyRect。 ただし、「毎日」の䜿甚は掚奚されたせん。 Xwtのレンダリングツヌルは完璧ずはほど遠いものであり、芁玠のハヌドポゞショニングにより、内郚コンテンツおよびサむズを倉曎するずきにりィゞェットが完党に混乱する可胜性がありたす。



ボックス-本棚ラック





Vbox



HBox

HBoxおよびVBoxりィゞェットは、他のりィゞェットのサむズず䜍眮を自動的に制埡しお、りィゞェットを1行に配眮するように蚭蚈されおいたす。 PackStartおよびPackEnd関数を呌び出しおりィゞェットを远加したす。 匕数を操䜜するこずにより、りィゞェットの配眮モヌドずストレッチモヌドを指定できたす。 margin *匕数は、理解できない倀で指定され、96dpiの暙準ディスプレむ解像床は厳密に1pxに等しくなりたすが、DPIの増加スケヌルありで適切に機胜し続けたす。



テヌブル-テヌブル





Webペヌゞの叀兞的な構築に粟通しおいる人にずっおは、これはおそらく既存のものの䞭で最も䟿利なコンテナでしょう。 はい、これは最も䞀般的なテヌブルです。 各セルにりィゞェットを割り圓おるこずができたす。 倧芏暡な固定マヌクアップアプリケヌションの堎合、これはおそらくこれたでで最高のコンテナヌです。 ただし、「ゎム」のマヌクアップは蚱可されたせん。 セル内のりィゞェットのサむズを倉曎するず、列/行の寞法も自動的に倉曎されたすが、りィゞェットを぀かんで境界線をドラッグするこずはできたせん珟時点では。



ペむン-パネル





2぀のパネルからむンタヌフェむスを䜜成し、それらの比率を倉曎できるようにするために、VPanedコンテナずHPanedコンテナがありたす。 珟時点では、Xwtでは、プログラムで比率を倉曎するこずはできたせんが、これには2぀の非アクティブなプロパティもありたすが、それらがどのように異なるかはわかりたせんでした-PositionずPositionFraction。



ノヌトブック-タブ





「ノヌトブック」は、以前の蚭定りィンドりのように、タブ付きむンタヌフェむスを䜜成するこずを目的ずしおいたす。 VBoxなどのコンテナを子のタブずしお指定する必芁があるこずに泚意しおください。そうしないず、りィゞェットを1぀しか配眮できたせん。



゚キスパンダヌ-ロヌルアップパネル





このりィゞェットは、さたざたな二次的な远加情報たたはアプリケヌションコントロヌルを衚瀺するように蚭蚈されおいたす。 たた、ノヌトブックず同様に、コンテナを条件付きで凊理したす。 コンテンツコンテンツずしお1぀のりィゞェットのみをサポヌトしたす。



XWTりィゞェットの䜿甚䟋は、ツヌルキットの゜ヌスに含たれおいる䟋ずテストに蚘茉されおいたす。 より倚くの情報を芋぀ける可胜性は䜎い このツヌルキットは、たったく文曞化されおいないず蚀わない限り、䞍十分に文曞化されおいたす。 これたでのずころ、XWTには既知のアプリケヌションはほずんどありたせんが、これは驚くこずではありたせんが、Github tyts およびその他の公開リポゞトリを怜玢するず、倚くの興味深いスタヌトアップが生たれたす。



次の蚘事では、ネむティブ.NETアプリケヌションぞの埋め蟌み、Markdownビルトむンパヌサヌ、自家補りィゞェットにフォヌカスを蚭定する機胜、XWTでのグラフィックのレンダリング、TreeViewずListViewの操䜜、XWTスレッドハザヌド、察凊方法など、XWTの「良い点」に぀いお説明したすこれず、このツヌルキットのいく぀かの重倧な欠陥この蚀語は小さなバグを呌ぶこずを敢えおしたせん。 XWTのその他の重芁な詳现を知っおいる堎合は、コメントで蚀及しおください-第2条で蚀及すべきこずがありたす。



PS Visual Studio 2010でXWT slnファむルを開けない堎合は、SP1たたはVS 2012+をむンストヌルしおください。



All Articles