SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

ASP.NET Futuresで次世代ASP.NETを体験しよう

ASP.NET Futuresのコントロール利用方法を学習する

XAMLコントロール

 XAMLコントロールは、作成されたXAMLファイルをXAMLコントロール上で参照設定を行うだけでWebページ上にホストできます(図7~8)。

図7 実行直後の画面
図7 実行直後の画面
図8 実行中の画面(アニメーション動作中)
図8 実行中の画面(アニメーション動作中)
図9 マウスイベントを発生させた画面
図9 マウスイベントを発生させた画面

 XAMLコントロールはSilverlight 1.0ではJavaScriptを、Silverlight 1.1では動的言語などを利用して、コンテンツ(XAMLファイル)に対話性を持たせることができます。ここでは、JavaScriptを利用した処理の記述について説明します。

 以下の表2にXAMLコントロールで設定できるプロパティの中で、頻繁に利用しそうな物をまとめてみました。サンプルの中ですべて活用はしていませんが、参照ください。

表2
プロパティ名概要
EnableHtmlAccessXAMLで定められるコードがSilverlightをホストしているDOMを含む、HTML DOMにアクセスするかどうか。既定ではTrue。
MaxFramerateXAMLファイル内のフレームレート。既定では24。
SilverlightBackColorSilverlightをホストしたXAMLコントロールの背景色。
XamlUrl参照するXAMLファイルのURL。
OnClientXamlErrorXAMLファイルのロード失敗時(Webページ実行時エラー)に実行したいJavaScriptファイル。
OnClientXamlLoadedXAMLファイルがロードされる時に実行したいJavaScriptファイル。

 XAMLコントロールはMediaコントロール同様に、XamlUrlプロパティの参照だけ設定をすれば動作します。こちらもASP.NETを利用したSilverlightアプリケーションの第一歩としては最適なコントロールの1つと言えます。

 ただし、大きさなどの指定は別途行う必要があるので、XAMLファイル内で設定した以上の大きさを設定する必要があります(さもないとXAMLファイルが切れた状態で表示されてしまうので)。

 以下のサンプルはXAMLファイル(アニメーション付)を参照させて、Webページ上に表示させた物です。中心の円に対して4つのマウスイベントを与えています。まずはフォームデザイナ上のコードです。

XAML.aspxファイル(一部)
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Xaml ID="Xaml1" runat="server" XamlUrl="~/XAMLFile.xaml"
 Height="400" Width="450" SilverlightBackColor="Pink" >
    <Scripts>
        <asp:ScriptReference Path="XAMLScript.js" />
    </Scripts>
</asp:Xaml>

 次にXAMLファイルの記述ですが、XAMLファイル内のアニメーション処理に関しては、前述したようにこちらの記事で非常に丁寧に書かれているのでそちらを参照してください。少し大きめのCanvasオブジェクトの中にいくつか図形をレンダリングさせ、アニメーションを付加しています。

XAMLFile.xamlファイル
<Canvas
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Background="Transparent"
   >
  <!--アクションを起動するトリガのサポート-->
  <Canvas.Triggers>
    <!--ページが読み込まれたときにイベント起動-->
    <EventTrigger RoutedEvent="Canvas.Loaded">
      <EventTrigger.Actions>
        <!--Storyboard内のアニメーションを指定された
            オブジェクトやプロパティに適用する-->
        <BeginStoryboard>
          <Storyboard>
            <!--緑色の円が上から下まで動き続ける-->
            <DoubleAnimation Storyboard.TargetName="Ellipse1"
                             Storyboard.TargetProperty="(Canvas.Top)"
                             From="0" To="300" AutoReverse="true"
                             BeginTime="0:0:0" Duration="0:0:2"
                             RepeatBehavior="Forever"/>
            <!--赤色の円が左から右へ動き続ける-->
            <DoubleAnimation Storyboard.TargetName="Ellipse2"
                             Storyboard.TargetProperty="(Canvas.Left)"
                             From="0" To="300" AutoReverse="true"
                             BeginTime="0:0:0" Duration="0:0:4"
                             RepeatBehavior="Forever"/>
            <!--オレンジ色の四角形が「く」の字のように動き続ける-->
            <!--四角形が下から上に動く-->
            <DoubleAnimation Storyboard.TargetName="Rectangle2"
                             Storyboard.TargetProperty="(Canvas.Top)"
                             From="300" To="0" AutoReverse="true"
                             BeginTime="0:0:0" Duration="0:0:8"
                             RepeatBehavior="Forever"/>
            <!--四角形が下から上に動く倍の速さで右から左へと動く
            左端まで移動した時点で右側へと動く-->
            <DoubleAnimation Storyboard.TargetName="Rectangle2"
                             Storyboard.TargetProperty="(Canvas.Left)"
                             From="350" To="0" AutoReverse="true"
                             BeginTime="0:0:0" Duration="0:0:4"
                             RepeatBehavior="Forever"/>
          </Storyboard>
        </BeginStoryboard>
      </EventTrigger.Actions>
    </EventTrigger>
  </Canvas.Triggers>

  <!--緑色の円の描画-->
  <Ellipse x:Name="Ellipse1" Opacity=".65" Fill="green"
           Height="100" Width="100" />
  <!--テキストの描画-->
  <TextBlock Text="Ellipse and RectAngle"  FontSize="30"/>
  <!--赤色の円の描画-->
  <Ellipse x:Name="Ellipse2" Opacity=".65" Fill="red"
         Height="100" Width="100" />
  <!--右下に表示される四角形の描画-->
  <Rectangle x:Name="RectAngle1" Opacity=".5" Fill="purple"
             Height="200" Width="200" Canvas.Left="250"
             Canvas.Top="200" Stroke="Red" StrokeThickness="5" />
  <!--中央に表示される円の描画で、マウスイベントに対応-->
  <Ellipse x:Name="Ellipse0" Opacity=".7"  Height="150" Width="150"
           Canvas.Left="80" Canvas.Top="100" Stroke="Black" StrokeThickness="10"
           Fill="yellow" MouseLeftButtonDown="changeEllipseSizeAndColor"
           MouseEnter="changeEllipseColor" MouseLeave="changeEllipseSize"
           MouseMove="changeEllipsePosition"/>
  <!--オレンジ色の円の描画-->
  <Rectangle x:Name="Rectangle2" Opacity=".65" Fill="orange"
           Height="100" Width="100" RadiusX="15" RadiusY="15" />
</Canvas>

 最後に中央に表示される円(Ellipse0)にMouseLeftButtonDownイベント、MouseLeaveイベント、MouseEnterイベント、MouseMoveイベントの4つのマウスイベントを付加します。XAMLファイル内でイベントが記述されているオブジェクトがsenderとして渡され(ここではEllipseオブジェクト)、findNameメソッドがオブジェクト内に記述されたx:Name(ここではEllipse0)を指定することで、オブジェクト内のプロパティ(FillプロパティやHeightプロパティなど)を編集しています。

XAMLScript.jsファイル
//MouseLeftButtonDownイベント
//円の色を紫に、高さと幅を400に変更する
function changeEllipseSizeAndColor(sender, args) {
    sender.findName("Ellipse0").Fill = "purple";
    sender.findName("Ellipse0").Height = "400";
    sender.findName("Ellipse0").Width = "400";
}

//MouseLeaveイベント
//円の高さと幅を100に変更し、円の外側のラインを黒に、太さを10にする
function changeEllipseSize(sender, args) {
    sender.findName("Ellipse0").Height="100";
    sender.findName("Ellipse0").Width="100";
    sender.findName("Ellipse0").Stroke="black";
    sender.findName("Ellipse0").StrokeThickness="10";
}

//MouseEnterイベント
//円の色を青色に変える
function changeEllipseColor(sender, args) {
    sender.findName("Ellipse0").Fill="blue";
}

//MouseMoveイベント
//円の外側のラインを赤色に、太さを5にする
function changeEllipsePosition(sender, args) {
    sender.findName("Ellipse0").Stroke="red";
    sender.findName("Ellipse0").StrokeThickness="5";
}

 以上の設定で、XAMLコントロールとJavaScriptを組み合わせたページの完成です。実行画面は図7~9のようになります。

次のページ
Historyコントロール

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト ナオキ(ナオキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1586 2007/08/23 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー