ListPage

2010年5月20日木曜日

WPF and Silverlight 2

WPF and Silverlight 2


今回使用するWPFクラスライブラリとXAML


XAML WPFクラス
<Application>要素 System.Windows名前空間のApplicationクラス
<Window>要素 System.Windows名前空間のWindowクラス
<Button>要素 System.Windows.Controls名前空間のButtonクラス

ボタンの追加

前回のHelloWorldプログラムにボタンを追加

<Button Width="100" Height="50" >
 Click
 %lt;/Button>

<Window>の子要素は自動的にセンタリングされるらしい
なおかつ<Window>要素は1つの子要素しか持つことができない。


イベントハンドラの追加 *.xaml

GUIとロジックの依存関係を薄める為に、イベントやそれに関係するロジックは
C#やVBで記述する。

XAML側のメソッドの追加
<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="HelloWorldWindow"
  Title="My First XAML"
  Width="320"
  Height="240"
>
  <Button Width="100" Height="50" Click="HelloWorldWindow_Click">
    Click Me!
  </Button>
</Window>

<Button>要素のClick属性にボタンがクリックされた時に呼び出されるメソッドの
名前を記述する。
XAMLによるウィンドウの記述から暗黙的に作成されるクラスの名前を指定するために、<Window>要素に
対して[x:Class属性]でクラス名を指定する。

x:Class属性のxとはなんぞや?
xはプリフィックスである。リファレンス・マニュアルなどもxを付ける決まりになっている。
例えば、要素名の[Windows]や[Button]その属性名の[Width]や[Height]の名前空間は
<Window>要素のxmlns属性で指定されている
http://schemas.microsoft.com/winfx/2006/xaml/presentation
これはWPF名前空間と呼ばれ、名前空間に属する要素や属性はWPFのクラス・ライブラリの項目と対応付けられる
この時、規定名前空間以外の異なる名前空間の要素や属性を記述するには、プリフィックスが必要になる。
前例としてxを出したが実際にはなんでも良い。

例えば、x:Class="HelloWorldWindow"とあったがこれを
xaml:Class="HelloWorldWindow"やxamlclass:Class~と記述しても動作上では問題がない。

コードビハインド・ファイルによるイベント・ハンドラ *.cs

win.xaml.cs
using System.Windows;

  public partial class HelloWorldWindow : Window {
   void HelloWorldWindow_Click(object sender, RoutedEventArgs e)
   {
    MessageBox.Show("クリック");
   }
  }
 
部分クラス partialキーワードを使えば、本来はHelloWorldWindowクラス内に存在しなければならない
HelloWorldWindow_Clickメソッドを外部から追加できる。

この外部から追加したメソッドは、<Button Width="100" Height="50" Click="HelloWorldWindow_Click">

プロジェクトファイルの修正 *.proj

プロジェクトファイル内の<ItemGroup>に<Compile Include="win.xaml.cs" />を追加する。
<ItemGroup>
    <ApplicationDefinition Include="app.xaml" />
    <Page Include="win.xaml" />
    <Compile Include="win.xaml.cs" />

これでコンパイルする。

0 件のコメント:

コメントを投稿