F# + Silverlight で Hello World (2) [OCaml]
XAML で定義したキャンバス上の部品に F# 側からアクセスするには Canvas の FindName メソッドを使えばいいようだ。
というわけで XAML を以下のように変更する。Greeting という名前のテキストブロックを追加したほか、MouseLeftButtonDown イベントで Page_MouseLeftButtonDown メソッドが呼ばれるように指定した。
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MouseLeftButtonDown="Page_MouseLeftButtonDown"
x:Class="SilverTest.Page;assembly=SilverTest.dll"
>
<TextBlock x:Name="Greeting">Hello Silverlight!</TextBlock>
</Canvas>
F# のほうではイベントに呼応して FindName を使って TextBlock を探し出して内容を書き換える。
namespace SilverTest
open System;
open System.Windows;
open System.Windows.Controls;
open System.Windows.Documents;
open System.Windows.Ink;
open System.Windows.Input;
open System.Windows.Media;
open System.Windows.Media.Animation;
open System.Windows.Shapes;
type Page = class inherit Canvas
new() = {}
member x.Page_MouseLeftButtonDown(o : obj, e : MouseEventArgs) =
let canvas = o :?> Canvas in
let text = canvas.FindName("Greeting") :?> TextBlock in
text.Text <- "I was pushed!!"
end
コメント 0