WPFやSilverlight、Windows Phone開発ではビヘイビアという便利な機能があります。ビヘイビアは、Expression Blendからはとても簡単に利用できるすばらしいものなのですが、Visual Studioから利用したい場合、XAMLを手書きするしか方法がありません。
また、多くのWindows Phone開発者はVisual Studioを得意としているものの、Expression Blendが苦手でビヘイビアの使いどころがよく分からないと聞きます。
今回は、ビヘイビアを徹底的に使い倒し、この機能でどのようなことができるのかを紹介します。
英和辞典でBehaviorを単語検索すると、以下のような意味が出てきます(goo辞書より引用)。
WPFやSilverlight、Windows Phoneの開発におけるビヘイビアは以下のように表せます。
もう少し噛み砕いて表現すると、「だれを」「どうしたときに」「だれの」「なにを」「どうするか」をExpression Blendのパネルで定義していくパーツです。
| SourceName | image | だれを | 
|---|---|---|
| EventName | Loaded | どうしたときに | 
| Value | Play | どうする | 
Windows Phone用のビヘイビアはデフォルトで13種類あります。
それぞれできることが違い、求めたアクションや動作に応じたものを利用します。
まずは取りあえず使ってみましょう。初歩の初歩ですが、ビヘイビアだけで「Hello World!」アプリを作ってみます。今回使用するビヘイビアはChangePropertyActionだけです。ChangePropertyActionはコントロールのプロパティを変更するビヘイビアです。
まずExpression Blendを起動し、[Windows Phoneアプリケーション]プロジェクトを作成します。
[ContentPanel]を選択した状態で、コントロールバーから[TextBlock]をダブルクリックします。すると、TextBlockコントロールが設置されます。
[TextBlock]をダブルクリックして、TextBlockコントロールに名前を付けます。今回は「Text」とします。
同様にButtonコントロールを設置し、デザインビューでドラッグして移動します。
コントロールのアセットからビヘイビアを選択し、[ChangePropertyAction]を「Button」コントロールにドラッグ&ドロップします。
[ChangePropertyAction]を選択すると、[プロパティ]パネルが変化します。
今回は[ChangePropertyAction]プロパティを表のように定義します。
| SourceName | [親](ここではButtonのこと) | だれを | 
|---|---|---|
| EventName | Tap | どうしたときに | 
| TargetName | Text | だれの | 
| PropertyName | Text | なにを | 
| Value | Hello Blend | どうする | 
実行しましょう。同じようにButtonをタップすると、TextBlockが「Hello Blend」に変わります。これがビヘイビアを使った「Hello World」アプリです。
Expression Blendは、こうしたビヘイビアを使った開発を得意とします。このビヘイビアはXAMLで記述されるので、Visual Studioでも手書きで利用可能ですが、Expression Blendほど簡単には使えません。「ビヘイビアを使うためだけにExpression Blend for Windows Phoneを利用してもよい」といっても過言ではないでしょう。
実際に「MainPage.xaml」は以下のようになります。これだけだと、たいした量ではないように思えますが、実際にアプリを開発していると、全部手書きしていくのは大変ですね。
<phone:PhoneApplicationPage
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
  xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
  xmlns:ec="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
  mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800"
  x:Class="WindowsPhoneApplication26.MainPage"
  FontFamily="{StaticResource PhoneFontFamilyNormal}"
  FontSize="{StaticResource PhoneFontSizeNormal}"
  Foreground="{StaticResource PhoneForegroundBrush}"
  SupportedOrientations="Portrait" Orientation="Portrait"
  shell:SystemTray.IsVisible="True">
 
  <!--LayoutRoot は、すべてのページ コンテンツが配置されるルート グリッドです-->
  <Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
 
    <!--TitlePanel には、アプリケーションの名前とページ タイトルが含まれています。-->
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
      <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
      <TextBlock x:Name="PageTitle" Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>
 
    <!--ContentPanel - 追加のコンテンツを配置します-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
      <TextBlock x:Name="textBlock" HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Text="TextBlock"/>
      <Button Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,31,0,0">
        <i:Interaction.Triggers>
          <i:EventTrigger EventName="Click">
            <ec:ChangePropertyAction TargetName="textBlock" PropertyName="Text" Value="Hello Blend"/>
          </i:EventTrigger>
        </i:Interaction.Triggers>
      </Button>
    </Grid>
  </Grid>
</phone:PhoneApplicationPage>
簡単な使い方を紹介したところで、Expression Blendとビヘイビアの実力をお見せします。ゲームを1つ作成したので、次ページからは作り方を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.