Eto.FormsのExpanderをXAMLで
前回のExpanderについて、XAMLで書いてみます。
結果(アプリケーションの見た目や動作)は前回と似ています。
まずはXAMLを書いてみます。
<?xml version="1.0" encoding="UTF-8"?> <Form xmlns="http://schema.picoe.ca/eto.forms" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="My Eto Form" ClientSize="250, 250" > <StackLayout> <Label x:Name="message" Text="Welcome!" /> <Expander Header="detail:"> <StackLayout> <TextBox x:Name="name" PlaceholderText="Your Name..." ShowBorder="True" /> <Button Text="OK" Click="HandleOK" /> </StackLayout> </Expander> </StackLayout> <Form.Menu> <MenuBar> <ButtonMenuItem Text="F&ile"> </ButtonMenuItem> <MenuBar.QuitItem> <ButtonMenuItem Text="Quit" Click="HandleQuit" /> </MenuBar.QuitItem> </MenuBar> </Form.Menu> </Form>
Expander
はXAML入力時にもサポートされており、intellisenseもききます。
タグの中身はControl
プロパティとなります。
なお、Header
プロパティに、文字列(つまりLabel)以外のコントロールを割り当てる方法は、こちらでは未確認です。
コードビハインドから参照するコントロールには、x:Name
属性を設定します。
次にC#コード(コードビハインド)を記述します。
using System; using System.Collections.Generic; using Eto.Forms; using Eto.Drawing; using Eto.Serialization.Xaml; namespace EtoSample_ExpanderXaml { public class MainForm : Form { Label message = null; TextBox name = null; public MainForm() { XamlReader.Load(this); } protected void HandleOK(object sender, EventArgs e) { message.Text = $"Welcome, {name.Text}!"; } protected void HandleQuit(object sender, EventArgs e) { Application.Instance.Quit(); } } }
コードで参照するコントロールは、XAMLのx:Name
属性と同一の名前で定義しておく必要があります。
これで、前回と同様の(Headerだけが異なる)アプリケーションができます。
開くと、TextBoxとButtonがあらわれます。
TextBoxに名前を入れてボタンをクリックすれば、Labelの中身が書き換わります。
ここで一区切り
Eto.Formsについては、とりあえず今回でいったん終わろうと思います。たぶん、クライアントGUIアプリケーション開発経験者なら、あとはAPIで分かるだろうと思いますし。
クロスプラットフォームでありがちな最大公約数問題はEto.Formsでもあると思いますが、やや古風で堅実なアプリケーションをC#で作るなら、検討に値するものだと思います。