{"id":6080,"date":"2014-07-29T11:34:44","date_gmt":"2014-07-28T17:34:44","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/?p=6080"},"modified":"2014-07-29T17:04:04","modified_gmt":"2014-07-29T08:04:04","slug":"f-%e3%81%a7-windows-ui-xaml-%e3%81%ae%e3%82%af%e3%83%a9%e3%82%b9%e3%82%92%e3%83%aa%e3%83%95%e3%83%ac%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%a9%e3%83%83%e3%83%97","status":"publish","type":"post","link":"https:\/\/www.moonmile.net\/blog\/archives\/6080","title":{"rendered":"F# \u3067 Windows.UI.Xaml \u306e\u30af\u30e9\u30b9\u3092\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3063\u3066\u30e9\u30c3\u30d7\u3057\u3066 Windows \u30b9\u30c8\u30a2 \u30a2\u30d7\u30ea\u4f5c\u308b\u8a66\u307f"},"content":{"rendered":"<p>\u4eca\u3001\u624b\u5143\u3067\u4f5c\u3063\u3066\u3044\u308b WinXamlProvider \u306f\u3001Windows Store 8.1 \u3068 Windows Phone 8.1 \u3067\u4f7f\u3063\u3066\u3044\u308b XAML \u3092 F# \u3067\u52d5\u304b\u305d\u3046\u3068\u3044\u3046\u8a66\u307f\u306e\u3072\u3068\u3064\u3067\u3059\u3002<\/p>\n<p>WinXamlProvider<br \/>\n<a href=\"http:\/\/github.com\/moonmile\/WinXamlProvider\">http:\/\/github.com\/moonmile\/WinXamlProvider<\/a><\/p>\n<p>Windows Store \u30a2\u30d7\u30ea\u3092\u4f5c\u308b F# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c Microsoft \u304b\u3089\u63d0\u4f9b\u3055\u308c\u308c\u3070\u3044\u3044\u306e\u3067\u3059\u304c\u3001\u305d\u3093\u306a\u96f0\u56f2\u6c17\u3082\u306a\u3044\u3002\u6b63\u5f53\u306a\u65b9\u6cd5\u3068\u3057\u3066\u306f\u3001\u81ea\u524d\u3067 F# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f5c\u308c\u3070\u3088\u3044\u306e\u3067\u3059\u304c\u3001\u3069\u3046\u3084\u3089 *.target \u306e\u307b\u3046\u3092\u5927\u304d\u304f\u5909\u3048\u306a\u3044\u3068\u99c4\u76ee\u3063\u307d\u304f\u3066\u3001\u9813\u632b\u4e2d\u3067\u3059\u3002\u304a\u305d\u3089\u304f MSBuild \u3042\u305f\u308a\u3092\u8a73\u7d30\u306b\u8abf\u3079\u306a\u3044\u3068\u3046\u307e\u304f\u3044\u304b\u306a\u305d\u3046\u306a\u306e\u3068\u3001XAML \u30d5\u30a1\u30a4\u30eb\u304b\u3089 C#\/VB\/C++ \u30b3\u30fc\u30c9\u306b\u843d\u3068\u3057\u3066\u3044\u308b\u7b87\u6240\u306b\u3001\u3046\u307e\u304f F# \u3092\u8ffd\u52a0\u3057\u306a\u3044\u3068\u3044\u3051\u307e\u305b\u3093\u3002MVVM \u30d1\u30bf\u30fc\u30f3\u306e\u307f\u3067\u3084\u308b\u304b\u3001\u3053\u3053\u3067\u3084\u3063\u3066\u3044\u308b\u3088\u3046\u306b\u5b9f\u884c\u6642\u306b\u30b3\u30fc\u30c9\u30d3\u30cf\u30a4\u30c9\u3092\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3059\u308b\u65b9\u6cd5\u3092\u3068\u308c\u3070\u3001\u30d3\u30eb\u30c9\u6642\u306b XAML \u304b\u3089\u30b3\u30fc\u30c9\u30d3\u30cf\u30a4\u30c9\u3092\u51fa\u529b\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3042\u308b\u3044\u306f\u3001F# \u306e Type Provider \u3092\u4f5c\u3063\u3066\u3001\u30d3\u30eb\u30c9\u6642\u306b\u9759\u7684\u306b\u4f5c\u308b\u65b9\u6cd5\u3067\u3082\u3088\u3044\u3067\u3057\u3087\u3046\u3002WPF \u306e XAML \u7528\u306e Type Provider \u306f FsXaml<br \/>\n<a href=\"https:\/\/github.com\/fsprojects\/FsXaml\">https:\/\/github.com\/fsprojects\/FsXaml<\/a> \u3092\u4f7f\u3048\u3070\u3088\u3044\u3093\u3067\u3059\u304c\u3001WinStore \u7528\u306e XAML \u304c\u3042\u308a\u307e\u305b\u3093\u3002\u306a\u305c\u3001WinStore \u306e XAML \u306b\u79c1\u304c\u3053\u3060\u308f\u308b\u306e\u304b\u3068\u3044\u3048\u3070\u3001Surface RT \u306e\u3088\u3046\u306a WinRT \u30bf\u30d6\u30ec\u30c3\u30c8\u3067\u306e\u4f7f\u3044\u624b\u3092\u60f3\u5b9a\u3057\u3066\u3044\u308b\u305f\u3081\u3067\u3059\u3002\u3048\u3048\u3001\u30e6\u30cb\u30d0\u30fc\u30b5\u30eb\u30a2\u30d7\u30ea\u306b\u3057\u3066 Windows Phone 8.1 \u3067\u3082\u3046\u307e\u304f\u52d5\u304f\u3088\u3046\u306b\u306a\u3063\u305f\u306e\u306f\u300c\u304a\u307e\u3051\u300d\u3067\u3059\u304b\u3089\u3002<\/p>\n<p>\u25a0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5206\u3051\u308b<\/p>\n<p>\u73fe\u72b6\u3067\u306f\u3001WinStore \u3068 WinPhone \u3067\u306f\u30e1\u30a4\u30f3\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b F# \u3092\u636e\u3048\u308b\u3053\u3068\u304c\u96e3\u3057\u3044\u306e\u3067\u3001<\/p>\n<ul>\n<li>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3092 C# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u4f5c\u308b<\/li>\n<li>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092 F# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u4f5c\u308b<\/li>\n<\/ul>\n<p>\u3068\u3044\u3046\u3053\u3068\u306b\u3057\u307e\u3059\u3002\u3053\u306e\u65b9\u5f0f\u306f\u3001Xamarin.Forms \u3092\u4f7f\u3063\u3066 iOS\/Android \u3092\u4f5c\u308b\u3068\u304d\u3068\u540c\u3058\u3067\u3001\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u30ed\u30b8\u30c3\u30af\u90e8\u5206\u3092\u30e9\u30a4\u30d6\u30e9\u30ea\u5316\u3057\u3066\u3001\u53ef\u642c\u6027\u3092\u9ad8\u3081\u308b\u3068\u3044\u3046\u65b9\u5f0f\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u90e8\u5206\u304c PCL(Portable Class Library) \u306b\u306a\u3063\u3066\u3057\u307e\u3046\u306e\u3067\u3001\u4f7f\u3048\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u5236\u9650\u304c\u3067\u3066\u304d\u307e\u3059\u3002<\/p>\n<p><a title=\"20140729_01\" href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/20140729_01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/20140729_01-300x187.jpg\" alt=\"20140729_01\" width=\"300\" height=\"187\" class=\"alignnone size-medium wp-image-6083\" srcset=\"https:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/20140729_01-300x187.jpg 300w, https:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/20140729_01.jpg 941w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>\u3053\u3093\u306a\u98a8\u306b\u3001C# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u7c21\u5358\u306b\u53c2\u7167\u3067\u304d\u308b Windows.Xaml.UI.* \u3082\u3001PCL \u306e\u4e2d\u3067\u306f\u3067\u304d\u307e\u305b\u3093\u3002<br \/>\n\u76f4\u63a5 F# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u3044\u3066\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u66f8\u304d\u63db\u3048\u3068\u3001<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n    &lt;TargetFrameworkVersion&gt;v4.6&lt;\/TargetFrameworkVersion&gt;\r\n    &lt;TargetFrameworkProfile&gt;Profile32&lt;\/TargetFrameworkProfile&gt;\r\n<\/pre>\n<p>\u30bf\u30fc\u30b2\u30c3\u30c8\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306b Windows, Version=8.1 \u3092\u7121\u7406\u3084\u308a\u8ffd\u52a0\u3059\u308b\u3068 Windows.UI.Xaml \u306e namespace \u306f\u53c2\u7167\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u306e\u3067\u3059\u304c\u3001<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n  &lt;ItemGroup&gt;\r\n    &lt;TargetPlatform Include=&amp;quot;Windows, Version=8.1&amp;quot; \/&gt;\r\n    &lt;TargetPlatform Include=&amp;quot;WindowsPhoneApp, Version=8.1&amp;quot; \/&gt;\r\n    &lt;Compile Include=&amp;quot;Class1.fs&amp;quot; \/&gt;\r\n  &lt;\/ItemGroup&gt;\r\n<\/pre>\n<p>\u5b9f\u884c\u6642\u306b<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n{&quot;\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30a2\u30bb\u30f3\u30d6\u30ea 'Windows, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null'\u3001\u307e\u305f\u306f\u305d\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e 1 \u3064\u304c\u8aad\u307f\u8fbc\u3081\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002&quot;:&quot;Windows, Version=255.255.255.255, Culture=neutral, PublicKeyToken=null&quot;}\r\n<\/pre>\n<p>\u3068\u3044\u3046\u8b0e\u306a\u30a8\u30e9\u30fc\u3092\u51fa\u529b\u3057\u307e\u3059\u3002\u78ba\u304b\u306b\u3001\u7121\u7406\u306b\u8ffd\u52a0\u3057\u305f\u3060\u3051\u306a\u306e\u3067\u3001\u30ed\u30fc\u30c9\u81ea\u4f53\u304c\u3046\u307e\u304f\u3044\u3063\u3066\u3044\u306a\u3044\u3063\u307d\u3044\u306e\u3067\u3059\u3002\u3053\u3053\u306f\u5225\u9014\u4fee\u6b63\u3059\u308b\u3068\u3046\u307e\u304f\u3044\u306e\u304b\u3082\u3002<\/p>\n<p>\u5b9f\u9a13\u3057\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f <a href=\"https:\/\/github.com\/moonmile\/FsApp\">https:\/\/github.com\/moonmile\/FsApp<\/a> \u3067\u3059\u3002<\/p>\n<p>\u25a0Windows.UI.Xaml \u3092\u30e9\u30c3\u30d4\u30f3\u30b0\u3059\u308b<\/p>\n<p>PCL \u304b\u3089\u76f4\u63a5 Windows.UI.Xaml \u3092\u6271\u3046\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u304c\u3001\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3046\u3068\u30a2\u30af\u30bb\u30b9\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/wpid-dworkblogimage20140729_02org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/wpid-dworkblogimage20140729_02thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>\u65e2\u306b\u30d5\u30ed\u30f3\u30c8\u306e\u307b\u3046\u3067\u306f\u3001Windwos.UI.Xaml \u306b\u5fc5\u8981\u306a\u30a2\u30bb\u30f3\u30d6\u30ea\u306f\u30ed\u30fc\u30c9\u3055\u308c\u3066\u3044\u308b\u30cf\u30ba\u3067\u3059\u304b\u3089\u3001\u305d\u308c\u3081\u304c\u3051\u3066\u3061\u307e\u3061\u307e\u3068\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f5c\u3063\u3066\u3044\u304f\u65b9\u6cd5\u3067\u3059\u306d\u3002<\/p>\n<p>\u3053\u306e\u65b9\u6cd5\u81ea\u4f53\u306f\u3001Xamarin.Forms \u306e\u62e1\u5f35\u30ec\u30f3\u30c0\u30e9\u30fc\u3068\u304b\u3001MvvmCross \u306e\u30b5\u30fc\u30d3\u30b9\u306e\u4f5c\u308a\u65b9\u3060\u3068\u304b\u3068\u4f3c\u305f\u611f\u3058\u3067\u3001Xamarin.Forms \u3084 MvvmCross \u306e\u5834\u5408\u306f\u3001\u9069\u5f53\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f7f\u3063\u3066\u547c\u3073\u51fa\u3059\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u9762\u5012\u306a\u306e\u3067\u3001\u76f4\u63a5\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u547c\u3073\u51fa\u3057\u3092\u3057\u3066\u3044\u307e\u3059\u3002\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4f7f\u3046\u3068\u3001F# \u306e\u5834\u5408\u306b\u578b\u30ad\u30e3\u30b9\u30c8\u3067\u3084\u3084\u3053\u3057\u3044\u3063\u3066\u306e\u3082\u3042\u308b\u306e\u3067\u3002<\/p>\n<p>\u25a0\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u6210<\/p>\n<p>\u4eca\u3001\u96fb\u5353\u30a2\u30d7\u30ea\u306e\u30b5\u30f3\u30d7\u30eb\u3092\u4f5c\u3063\u3066\u3044\u308b\u9014\u4e2d\u3067\u3059\u304c\u3001\u69cb\u6210\u306f\u3053\u3093\u306a\u611f\u3058\u3067\u3059\u3002<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/wpid-dworkblogimage20140729_03org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/wpid-dworkblogimage20140729_03thum.jpg\" border=\"0\" \/><\/a><\/p>\n<ol>\n<li>WinStore\/Phone \u306e\u30e6\u30cb\u30d0\u30fc\u30b5\u30eb\u30a2\u30d7\u30ea\u3092\u4f5c\u6210<\/li>\n<li>F# PCL \u3092\u4f5c\u6210<\/li>\n<li>NuGet \u3067 WinXamlProvider \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08\u88fd\u4f5c\u4e2d\uff09<\/li>\n<li>WinStore\/Phone \u3067 XAML \u30d5\u30a1\u30a4\u30eb\u3092\u52d5\u7684\u306b\u30ed\u30fc\u30c9\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a\uff08\u8abf\u7bc0\u4e2d\uff09<\/li>\n<li>Page \u30af\u30e9\u30b9\u306e\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u3001BindInit \u3092\u547c\u3073\u51fa\u3057\u3002<\/li>\n<\/ol>\n<p>\u306e\u3088\u3046\u306b\u3059\u308b\u3068\u3001\u7279\u5b9a\u306e Xaml\/Page \u304c F# \u306e Page \u30af\u30e9\u30b9\u306b\u30d0\u30a4\u30f3\u30c9\u3055\u308c\u307e\u3059\u30024 \u306e\u624b\u9806\u306f\u3001\u52d5\u7684\u306b XAML \u3092\u30ed\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u3063\u3066\u3001\u3053\u3046\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5143\u30cd\u30bf\u306e XAML \u306f\u30d0\u30a4\u30ca\u30ea\u5f62\u5f0f\u306e *.xbf \u30d5\u30a1\u30a4\u30eb\u306b\u306a\u3063\u3066\u624b\u304c\u3060\u305b\u306a\u3044\u306e\u3067\u3001\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u3067\u30b3\u30f3\u30c6\u30f3\u30c4\u57cb\u3081\u8fbc\u307f\u3092\u3055\u305b\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u4e00\u5fdc\u3001\u52d5\u4f5c\u3055\u305b\u308b\u3068\u3001<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/wpid-dworkblogimage20140729_04org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2014\/07\/wpid-dworkblogimage20140729_04thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>\u306a\u611f\u3058\u3067\u52d5\u304d\u307e\u3059\u3002<\/p>\n<p>\u73fe\u5728\u3001Button, TextBlock, TextBox, Page \u30af\u30e9\u30b9\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3057\u304b\u30d0\u30a4\u30f3\u30c9\u3057\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u304b\u306a\u308a\u9650\u5b9a\u7684\u3067\u3059\u304c\u3002<\/p>\n<p>\u25a0\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u3067\u30d0\u30a4\u30f3\u30c9<\/p>\n<p>\u8a73\u7d30\u306a\u30b3\u30fc\u30c9\u306f\u3001<a href=\"http:\/\/github.com\/moonmile\/WinXamlProvider\">WinXamlProvider<\/a> \u306b\u3042\u308a\u307e\u3059\u304c\u3001\u4e3b\u8981\u90e8\u5206\u3092\u629c\u304d\u51fa\u3059\u3068\u3053\u3093\u306a\u611f\u3058\u3067\u3059\u3002<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\ntype ParseXaml() =\r\n\r\n    let findName( page, propName ) =\r\n        let mi = page.GetType().GetRuntimeMethod(&amp;quot;FindName&amp;quot;, &#x5B;|typeof&lt;string&gt;|])\r\n        let res = mi.Invoke( page, &#x5B;|propName|])\r\n        res\r\n\r\n    let bindMethod( page:obj, bind:obj, target:obj, eventName:string, methodName:string) =\r\n        let ei = target.GetType().GetRuntimeEvent(eventName)\r\n        let dt = ei.AddMethod.GetParameters().&#x5B;0].ParameterType\r\n        let mi = bind.GetType().GetRuntimeMethod(methodName,&#x5B;|typeof&lt;obj&gt;; typeof&lt;RoutedEventArgs&gt;|])\r\n\r\n        let handler =\r\n            new Action&lt;obj,obj&gt;(\r\n                fun sender eventArgs -&gt;\r\n                    let e = new RoutedEventArgs(eventArgs)\r\n                    mi.Invoke( bind, &#x5B;|sender; e|]) |&gt; ignore )\r\n\r\n        let handlerInvoke = handler.GetType().GetRuntimeMethod(&amp;quot;Invoke&amp;quot;,&#x5B;|typeof&lt;obj&gt;; typeof&lt;Type&#x5B;]&gt; |]);\r\n        let dele = handlerInvoke.CreateDelegate(dt, handler)\r\n\r\n        let add = new Func&lt;Delegate, EventRegistrationToken&gt; ( fun (t) -&gt;\r\n                        let ret = ei.AddMethod.Invoke(target, &#x5B;|t|] )\r\n                        ret :?&gt; EventRegistrationToken\r\n                    )\r\n        let remove = new Action&lt;EventRegistrationToken&gt;( fun(t) -&gt;\r\n                ei.RemoveMethod.Invoke( target, &#x5B;|t|]) |&gt; ignore )\r\n        WindowsRuntimeMarshal.AddEventHandler&lt;Delegate&gt;( add, remove, dele)\r\n\r\n    let bindProperty( page:obj, bind:obj, propName:string, t:Type ) =\r\n        let pprop = findName( page, propName )\r\n        if pprop &lt;&gt; null then\r\n            let bi = bind.GetType().GetRuntimeProperty(propName)\r\n\r\n            match t.Name with\r\n            | &amp;quot;TextBlock&amp;quot; -&gt; bi.SetValue( bind, new TextBlock(target = pprop))\r\n            | &amp;quot;TextBox&amp;quot; -&gt; bi.SetValue( bind, new TextBox(target = pprop))\r\n            | &amp;quot;Button&amp;quot;    -&gt; bi.SetValue( bind, new Button(target=pprop))\r\n            | _ -&gt; bi.SetValue( bind, new UIElement( target=pprop ))\r\n<\/pre>\n<p>Page.FindName \u304c\u5fc5\u8981\u306a\u306e\u3067\u3001findName \u95a2\u6570\u3067\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u3044\u307e\u3059\u3002<br \/>\nbindMethod \u95a2\u6570\u306f\u3001XAML \u3067\u8a18\u8ff0\u3057\u3066\u3042\u308b Click=&#8221;OnClickButton&#8221; \u306e\u30a4\u30d9\u30f3\u30c8\u3092\u3001F# \u306e\u30af\u30e9\u30b9\u30e1\u30bd\u30c3\u30c9\u306b\u500d\u5ea6\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u306d\u3002\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u306e\u767b\u9332\u306f\u3001WindowsRuntimeMarshal.AddEventHandler \u3092\u4f7f\u3044\u307e\u3059\u3002\u6b8b\u5ff5\u306a\u304c\u3089\u3001\u5143\u30cd\u30bf\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u524a\u9664\u3057\u3066\u3044\u306a\u3044\u306e\u3067\uff08\u9811\u5f35\u308c\u3070\u3067\u304d\u308b\u76ee\u9014\u306f\u7acb\u3061\u305d\u3046\u306a\u306e\u3067\u3059\u304c\uff09\u3001\u5143\u306e\u30a4\u30d9\u30f3\u30c8\u3068 F# \u306e\u30a4\u30d9\u30f3\u30c8\u30e1\u30bd\u30c3\u30c9\u306e\u4e21\u65b9\u3092\u547c\u3073\u51fa\u3057\u3066\u3057\u307e\u3044\u307e\u3059\u3002\u307e\u3042 C# \u306e\u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u306f\u7a7a\u306a\u306e\u3067\u3001\u305d\u306e\u307e\u307e\u3067\u3044\u3044\u3067\u3057\u3087\u3046\u3002<\/p>\n<p>\u3053\u306e\u3042\u305f\u308a\u306f\u3001\u982d\u304c\u3061\u304e\u308c\u305d\u3046\u306b\u306a\u308b\u3050\u3089\u3044\u3084\u3084\u3053\u3057\u3044\u306e\u3067\u3059\u304c\u3001\u307e\u3042\u306a\u3093\u3068\u304b\u3002\u3044\u304f\u3064\u304b C# \u306e\u30b3\u30fc\u30c9\u3082\u51fa\u3066\u304f\u308b\u306e\u3067\u3001\u305d\u308c\u3092\u53c2\u7167\u306b\u7d44\u307f\u7acb\u3066\u307e\u3059\u3002\u3053\u307e\u3081\u306b\u5c0f\u3055\u306a\u30e1\u30bd\u30c3\u30c9\u306b\u3057\u305f\u307b\u3046\u304c\u308f\u304b\u308a\u3084\u3059\u3044\u3067\u3059\u306d\u3002<\/p>\n<p>\u30d7\u30ed\u30d1\u30c6\u30a3\u547c\u3073\u51fa\u3057\u3082\u3044\u3061\u3044\u3061\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\nnamespace Moonmile.WinXamlProvider.UI\r\nopen System\r\nopen System.Reflection\r\n\r\n&#x5B;&lt;AllowNullLiteral&gt;]\r\ntype BaseElement() =\r\n    member val target:obj  = null with get, set\r\n    member this.getProp&lt;&#039;T&gt;( propName:string ) =\r\n        let pi = this.target.GetType().GetRuntimeProperty( propName )\r\n        pi.GetValue(this.target) :?&gt; &#039;T\r\n    member this.setProp( propName:string, value:obj ) =\r\n        let pi = this.target.GetType().GetRuntimeProperty( propName )\r\n        pi.SetValue( this.target, value)\r\n<\/pre>\n<p>\u3053\u308c\u3092\u4f7f\u3063\u3066\u3001Windows.UI.Xaml \u3092\u518d\u69cb\u7bc9\u3057\u307e\u3059\u3002<br \/>\nButton \u30af\u30e9\u30b9\u3092\u3001\u3053\u3093\u306a\u98a8\u306b\u30ea\u30d5\u30ec\u30af\u30b7\u30e7\u30f3\u3067\u30d0\u30a4\u30f3\u30c9\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\ntype Button() =\r\n    inherit ButtonBase()\r\n    member this.Flyout\r\n        with get() = base.getProp&lt;FlyoutBase&gt;(&amp;quot;Flyout&amp;quot;)\r\n        and set(value:FlyoutBase) = base.setProp(&amp;quot;Flyout&amp;quot;, value )\r\n    member this.CommandParameter\r\n        with get() = base.getProp&lt;Object&gt;(&amp;quot;CommandParameter&amp;quot;)\r\n        and set(value:Object) = base.setProp(&amp;quot;CommandParameter&amp;quot;, value )\r\n    member this.Command\r\n        with get() = base.getProp&lt;Windows.Input.ICommand&gt;(&amp;quot;Command&amp;quot;)\r\n        and set(value:Windows.Input.ICommand) = base.setProp(&amp;quot;Command&amp;quot;, value )\r\n    member this.ClickMode\r\n        with get() = base.getProp&lt;ClickMode&gt;(&amp;quot;ClickMode&amp;quot;)\r\n        and set(value:ClickMode) = base.setProp(&amp;quot;ClickMode&amp;quot;, value )\r\n...\r\n<\/pre>\n<p>\u3053\u306e\u3042\u305f\u308a\u306f\u624b\u4f5c\u696d\u3067\u66f8\u304f\u3068\u5927\u5909\u306a\u306e\u3067\u3001\u9069\u5f53\u306a\u30c4\u30fc\u30eb\u3092\u4f5c\u3063\u3066\u3001\u30b3\u30fc\u30c9\u51fa\u529b\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u305d\u306e\u3046\u3061\u81ea\u52d5\u751f\u6210\u3055\u305b\u3066\u3057\u307e\u3046\u3064\u3082\u308a\u3002<\/p>\n<p>\u25a0F# \u3067 MainPage \u30af\u30e9\u30b9\u3092\u66f8\u3044\u3066\u307f\u308b<\/p>\n<pre class=\"brush: vb; title: ; notranslate\" title=\"\">\r\nnamespace WinXamlProvider.Lib\r\nopen System\r\nopen Moonmile.WinXamlProvider\r\nopen Moonmile.WinXamlProvider.UI\r\n\r\ntype MainPage() =\r\n    member val textMessage:TextBlock = null with get, set\r\n    member this.Button_Click(sender:obj, e:RoutedEventArgs) =\r\n        this.textMessage.Text &lt;- &amp;quot;New F# message.&amp;quot;\r\n<\/pre>\n<p>Button \u3092\u30af\u30ea\u30c3\u30af\u3057\u305f\u3068\u304d\u306b Button_Click \u30a4\u30d9\u30f3\u30c8\u304c\u547c\u3073\u51fa\u3055\u308c\u3066\u3001textMessage \u306e\u5185\u5bb9\u3092\u66f8\u304d\u63db\u3048\u308b\u30b3\u30fc\u30c9\u3067\u3059\u3002\u307e\u3060 MVVM \u30bf\u30a4\u30d7\u306e SetBinding \u3092\u5b9f\u88c5\u3057\u3066\u3044\u306a\u3044\u306e\u3067\u3001WinForm \u3063\u307d\u3044\u66f8\u304d\u65b9\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u3067 Widows Store \u30a2\u30d7\u30ea\u3068 Windows Phone \u30a2\u30d7\u30ea\u3092 F# \u3067\u66f8\u304f\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u25a0\u4eca\u5f8c\u306f<\/p>\n<p>Button.Click \u30a4\u30d9\u30f3\u30c8\u3042\u305f\u308a\u3092\u30d0\u30a4\u30f3\u30c9\u3057\u3066\u3057\u307e\u3048\u3070\u3001\u76f4\u63a5 this.btn.Click.Add( &#8230; ) \u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308b\u306e\u3067\u3001\u30b3\u30fc\u30c9\u30d3\u30cf\u30a4\u30c9\u306e\u30a4\u30d9\u30f3\u30c8\u30b3\u30fc\u30c9\u3092\u66f8\u304b\u306a\u304f\u624b\u6e08\u3080\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u3092\u65e9\u6025\u306b\u5b9f\u88c5\u3002<br \/>\n\u3042\u3068\u306f\u3001\u81ea\u52d5\u751f\u6210\u30b3\u30fc\u30c9\u3092\u4fee\u6b63\u3057\u3066\u3001Windows.UI.Xaml \u4ee5\u4e0b\u306e\u5168\u3066\u306e\u30af\u30e9\u30b9\u3092\u30d0\u30a4\u30f3\u30c9\u3055\u305b\u3066\u3057\u307e\u3046\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u3001\u624b\u5143\u3067\u4f5c\u3063\u3066\u3044\u308b WinXamlProvider \u306f\u3001Windows Store 8.1 \u3068 Windows Phone 8.1 \u3067\u4f7f\u3063\u3066\u3044\u308b XAML \u3092 F# \u3067\u52d5\u304b\u305d\u3046\u3068\u3044\u3046\u8a66\u307f\u306e\u3072\u3068\u3064\u3067\u3059\u3002 WinXamlP &hellip; <a href=\"https:\/\/www.moonmile.net\/blog\/archives\/6080\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[59,52,49],"tags":[],"class_list":["post-6080","post","type-post","status-publish","format-standard","hentry","category-f","category-winrt","category-xaml"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/6080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=6080"}],"version-history":[{"count":5,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/6080\/revisions"}],"predecessor-version":[{"id":6086,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/6080\/revisions\/6086"}],"wp:attachment":[{"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=6080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=6080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=6080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}