çŽ1幎åãXamarin.FormsãšåŒã°ããã¯ãã¹ãã©ãããã©ãŒã ãã¬ãŒã ã¯ãŒã¯ãç»å ŽããŸããã CïŒãš.NETã䜿çšããŠãããŸããŸãªãã©ãããã©ãŒã çšã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã å®éãXamarin.iOSãXamarin.Androidãããã³Xamarin.WinPhoneã®ã¢ããªã³ã¯ããã以åã«æ¢ã«ååšããŠããŸããã ãŸããããããšã¯ç°ãªããã¢ããªã±ãŒã·ã§ã³ãšãã®UIã®ããžãã¯å
šäœãèšè¿°ã§ãããããžã§ã¯ãã1ã€ã ãäœæã§ããŸãã ãããŠãç°ãªããã©ãããã©ãŒã ã§ã³ã³ãã€ã«ããã ãã§ãã ãã®çµæãããããã¹ãŠã倧å¹
ã«æéãç¯çŽããŸãã
ãã®ãã©ãããã©ãŒã ã«ã¯ç¬èªã®èŠéããããããããã£ãŠããããéãæããããšã¯ã§ããªããšèããŠããŸãã åŸæ¥ãããŒã¿ã°ãªããã³ã³ãããŒã«ã®éçºããå§ããŸããã ãã®äœæ¥äžã«ãXamarin.Formsã®èå³æ·±ãéçºçµéšãç©ãã§ããŸãããããçãããšå
±æããããšæããŸãã
ãã®èšäºã¯DevCon 2015ã§ã®ç§ã®ã¬ããŒãã«åºã¥ããŠããã誰ã§ã
ããã§ãããªããŒãžã§ã³ãèªãããšãã§ã
ãŸã ã
Xamarin.Formsã®å©ç¹
ãŸãããã®ãã©ãããã©ãŒã ã®å©ç¹ã«ã€ããŠã話ããããšæããŸãã
- ãŸããããã¯ç§ãã¡å
šå¡ãCïŒãš.NETã«ç²ŸéããŠããããšã§ãã ã·ã£ãŒãã§é·ãéæžããŠããã®ã§ããã°ãããã€ãã®æ°ãããã¬ãŒã ã¯ãŒã¯ãèšèªãå匷ããã®ã«å€ãã®æéãè²»ããå¿
èŠã¯ãããŸããã ãŸãããŸãã¯å°ãªããšãæåã¯å¿
èŠãããŸãããçŸåšã®ç¥èã䜿çšããŠéåžžã«è¿
éã«éå§ã§ããŸãã
- 第äºã«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãäœæããŠæäœããæ¹æ³ã¯ãWindowsã§ãã䜿çšãããŠããæ¹æ³ã«è¿ããã®ã§ãã Xamarin Formsã¯XAMLããã€ã³ãã£ã³ã°ããã³ãã¬ãŒããã¹ã¿ã€ã«ãããã³ãã®ä»ã®æ¥œãã¿ã®æäœããµããŒãããŠãããããWPFéçºè
ã¯ç¹ã«åãã§ããŸãã ããããããããåæžãããŠããããšã¯æããã ãšæããŸããWPFã®ãã¹ãŠã®ãã¯ãŒãæåŸ
ããã¹ãã§ã¯ãããŸããããããã§ã䟿å©ã§ãã
- ããã¯CïŒã§ããããã次ã®å©ç¹ã¯ãæ¢ã«èšè¿°ãããã³ãŒããåå©çšã§ããããšã§ãã ã»ãšãã©ã®å Žåãæ£åžžã«æ©èœããŸãã ãã©ãããã©ãŒã ã«ã¯å¶éããããŸãããããã»ã©çŽ æŽããããã®ã§ã¯ãããŸããã XtraGridControlããååãªå€§ããã®ããŒã¹ãååŸããããšãã§ããã®ã§ãéåžžã«åœ¹ç«ã¡ãŸããã
- Xamarin.FormsãWPFã«äŒŒãŠãããšããäºå®ã¯ããã®ãã©ãããã©ãŒã ã®æ¬¡ã®ãã©ã¹ãæå³ããŸãïŒMVVMã å®éãXamarin.Formsã«ã¯XAMLãèŠèŠèŠçŽ ã«ã¯BindingContextïŒWPFã®DataContextã®ã¢ããã°ïŒãBindablePropertyïŒDependencyPropertyã®ã¢ããã°ïŒããããŸãã ãããã£ãŠãWPFãšåãæ¹æ³ã§ViewãViewModelã«é¢é£ä»ããããšãã§ããŸãã
- ãã®ãã©ãããã©ãŒã ã®ãã1ã€ã®å©ç¹ã¯ãUIã1ç®æã§ããèšè¿°ãããŠããªããããç°ãªãã·ã¹ãã ã®ã¢ããªã±ãŒã·ã§ã³ãéåžžã«ãã䌌ãŠããããšã§ãã ããšãã°ãäŒæ¥ã®çºå±ã«ãããŠéèŠãªããšã
Xamarin.Formsã®æ©èœãšæ¬ ç¹
ãã¥ã¢ã³ã¹ãšãã¡ãªããã«ç§»ããŸãããã
éå§ããã«ã¯ãå°ããªæè¡çãªçŽ¹ä»ã 次ã®å³ã§ã¯ãXamarin.Formsãã©ã®ããã«æ©èœãããã倧ãŸãã«ç€ºããŸããã

åè·¯ã®äžéšã«ã¯PCLéšåããããŸãã ããã¯åºæ¬çã«Xamarin.Formsã§ãã äžè¬çã«ã¯ããšãã£ã¿ãŒãããã²ãŒã·ã§ã³ããŒãã¬ã€ã¢ãŠãããã«ãªã©ã®ã³ã¬ã¯ã·ã§ã³ã§ãã UIãéçºãããšããã»ãšãã©ã®å ŽåãUIãæäœããŸãã ãã ãããããã®ã³ã³ãããŒã«ã¯ãPCLããŒãå
ã®åãªãæœè±¡åã§ãã äœããã®æ¹æ³ã§ããã€ã¹ã«è¡šç€ºã§ããããã«ãããããã¬ã³ãã©ãŒããããŸãã ãããã¯ãXamarin PlatformããŒãã®éå±€ã®æ¬¡ã®æ®µéã«ãããŸãã
PCLéšåã®äžã«ãXamarin.iOSãXamarin.Androidãããã³Xamarin.WinPhoneããããŸãã ããã¯åºæ¬çã«ãXamarin.Formsã®åã«ãã§ã«ååšããŠããXamarinã§ãã ãããŠããã®Xamarinãšã¯äœã§ããïŒ ãããã¯ãåãã©ãããã©ãŒã ã®ãã€ãã£ãã¯ã©ã¹ã®CïŒã©ãããŒã§ãã ã¬ã³ãã©ãŒ-ãããã¯ã察å¿ããããžã¥ã¢ã«ã³ã³ããŒãã³ãã®ã©ãããŒã§ãããPCLãªããžã§ã¯ããžã®ãªã³ã¯ãå
éšã«å«ãŸããŠãããããèšå®ããããããã£ãèªã¿åããèªå®
ã§é©çšã§ããŸãã
å°æ¥ããããã®ã¬ã³ãã©ãŒã¯æ¢ã«ãã€ãã£ãã³ã³ãããŒã«ã«ãããã€ãããŠããŸãã åè·¯ã®äžäœã¬ãã«ã§ããããèŠãããšãã§ããŸãã
æ··ä¹±ãé¿ããããã«ãäŸãæããŸãããã PCLéšåã«ã¯Buttonã¯ã©ã¹ããããŸãã åXamarinãã©ãããã©ãŒã ããŒãã«ã¯ãButtonã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãæ ŒçŽããButtonRendererã¯ã©ã¹ãå«ãŸããŠããŸãã äžæ¹ãButtonRendererã¯ãiOSã®UIButtonãªã©ãåãã©ãããã©ãŒã ã®ãã¿ã³ã¯ã©ã¹ã®ã©ãããŒã§ãã ãã®ãã§ãŒã³äžã§ãPCLããŒãããã®ã³ã³ãããŒã«ãæ©èœããŸãã
ãã®ã¡ã«ããºã ã«ã¯ããã®ãã©ãããã©ãŒã ã®ã»ãŒãã¹ãŠã®åé¡ãå«ãŸããŠããŸãã
Xamarin.Formsã§éçºãããšãã«çºçãã次ã®ã°ã«ãŒãã®åé¡ã¯åºå¥ã§ããŸãã
- WPFæ©èœã®äžå®å
šãªå®è£
- ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªãæ©èœã®å®è£
ã«ããã劥åãœãªã¥ãŒã·ã§ã³
- ç°ãªããã©ãããã©ãŒã ã§ã®ç°ãªãåäœ
- æ§èœ
次ã«ããããã®åé¡ãå
·äœçãªäŸã§èŠãŠã¿ãŸãããã
WPFæ©èœã®äžå®å
šãªå®è£
ãããç§ãã¡ãæåã«åºäŒã£ããã®ã§ãã Xamarin.Formsã«ã¯ãéçºã§ã®ãã³ãã¬ãŒãã®äœ¿çšã«å€§ããªå¶éããããŸãã WPFã§é·ãéåããŠãã人ãšããŠãç§ã¯ãã®ããŒã«ãæ¬åœã«å¥œãã§ãã ãã³ãã¬ãŒããåã«éããããšã§ã³ã³ãããŒã«ã®å€èŠ³ãä»»æã«å€æŽã§ããå Žåã«éåžžã«äŸ¿å©ã§ãã ãã ãããã³ãã¬ãŒããã¬ã³ãã©ãŒã®æŠå¿µã«ããŸãé©åããªãããšã¯æããã§ããããã¯ãWinPhoneã ãããšã³ããã©ãããã©ãŒã ã§ãã®ãããªæ©èœãåããŠããããã§ãã
ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªãæ©èœã®å®è£
ã«ããã劥åãœãªã¥ãŒã·ã§ã³
ãã©ãããã©ãŒã ã¯ç°ãªãå Žåããããã¬ã³ãã©ãŒã¯ãããã®éãããã¹ãŠåäžã®å¶åŸ¡ã¡ã«ããºã ã«æžããå¿
èŠããããŸãã ãããã£ãŠãããã€ãã®æ©èœãç ç²ã«ããå¿
èŠããããŸãã
- ããšãã°ãAndroidã§ã¯ãããã¹ããšãã£ã¿ãŒã§åäžè¡ã¢ãŒããšè€æ°è¡ã¢ãŒãã®äž¡æ¹ãæå¹ã«ã§ããŸãã ãã ããããã¯iOSã§ã¯å®è¡ã§ããŸããã ãããã®ç¶æ³ã«ã¯2ã€ã®ç°ãªãã³ã³ãããŒã«ããããŸãã 1ã€ã®PCLãªããžã§ã¯ãã¯1ã€ã®ã¬ã³ãã©ãŒã«ã®ã¿é¢é£ä»ãããããã©ãããã©ãŒã äžã®1ã€ã®ã³ã³ãããŒã«ã«é¢é£ä»ãããããããXamarin.Formsã«ã¯1ã€ã®åäœã®ã¿ãæ®ããããã®ãšãã£ã¿ãŒã¯åžžã«è€æ°è¡ã«ãªããŸãã
- ãŸããã¢ãã€ã«ãã©ãããã©ãŒã ã®ãã€ã«ã¹ããŒã³ã§ã¯ããžã§ã¹ãã£ãæäœããã¡ã«ããºã ã倧ããç°ãªããŸãã ãããŠãããããäžè¬çãªæœè±¡åã«æžããããšã¯éåžžã«å°é£ã§ãã ãããã£ãŠãXamarinã¯éåžžã®ã¿ããã®ã¿ããã£ããããæ©èœãæäŸããŸãïŒãã°ããªãããã§ã¯ãããŸããïŒã æ®ãã®ãžã§ã¹ãã£ã¯ãPCLéšåãããã£ããã£ã§ããŸããã
- ãã©ãããã©ãŒã ã«ãã£ãŠã¯ãCïŒãŸãã¯.NETã§ã§ããããšãã€ããªãã®ãŒçã«ã§ããªãå ŽåããããŸãã ãããã®å¶éã¯ãXamarinã®ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã ãã ããããã«æåã«ééãããšãã移åã«å¯ŸåŠããã®ã¯ç°¡åã§ã¯ãããŸããã
ããšãã°ãiOSã§ã¯ãå®è¡æã«ã³ãŒããçæã§ããªããšããæå³ã§ããã¹ãŠã®ã³ãŒããéçã§ããå¿
èŠããããŸãã éšåçã«ã¯ãSystem.Reflection.Emitåå空éãåé€ããããšã§ããã§ã«ç°¡åã«ãªã£ãŠããŸãã ãã ãããšãã¥ã¬ãŒã¿ã§åé¡ãªãã³ã³ãã€ã«ãå®è¡ãåäœããããããã€ã¹ã§ã¯ã©ãã·ã¥ããã³ãŒããäœæããããšãã§ããŸãã 幞ããªããšã«ããã§ã«æžããããã«ãèããããåé¡ã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã
ç°ãªããã©ãããã©ãŒã ã§ã®ç°ãªãåäœ
ã³ã³ãããŒã«ã®åäœã¯ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªãå ŽåããããŸãã ãã§ã«èŠãããã«ãXamarin.Formsã§ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¹ãŠã®ãã©ãããã©ãŒã ã®å
±ééšåã§èª¬æãããŠããŸãã ãããŠãæçµçã«ã¯ãã¹ãŠã®ã·ã¹ãã ã§åãããã«èŠããããšãäºæ³ãããŸãã ãŸãããŸãã¯å°ãªããšãéåžžã«è¿ãã ããããããã¯åžžã«ããã§ã¯ãããŸããã èžã¿èŸŒãã ã¡ã€ã³ã¬ãŒããèŠãŠã¿ãŸãããã
WinPhoneã®ããŒãžã³
WinPhoneã§ã¯ãäžéšã®ã³ã³ãããŒã«ã«å€§ããªããŒãžã³ããããŸãããããã¯ä»ã®ãã©ãããã©ãŒã ã§ã¯äœ¿çšã§ããŸããïŒããšãã°ãã¹ã€ããã³ã³ãããŒã«ïŒã ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®å€èŠ³ã¯ãå®å
šã«æäœäžèœã«ãªããŸã§ïŒèŠçŽ ãåã«å¯èŠé åã«åãŸããªãå ŽåïŒãAndroidããã³iOSã®ããŒãžã§ã³ãšã¯å€§ããç°ãªãå ŽåããããŸãã
å°ããªäŸã瀺ããŸãã åæ§ã®ã¬ã€ã¢ãŠãã§ãã¹ãã¢ããªã±ãŒã·ã§ã³ãäœæããå ŽåïŒ
<Grid RowSpacing="0"> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Switch Grid.Row="0â /> <Switch Grid.Row=â1â /> </Grid>
ãã®åŸãiOSã§å®è¡ãããšã次ã®ããã«è¡šç€ºãããŸãã

Androidã§ãåãã§ãã ããããWinPhoneã§å®è¡ãããšã次ã®çµæãåŸãããŸãã

ã芧ã®ãšãããã¹ã€ããã³ã³ãããŒã«ã¯äºãã«é¢ããå Žæã«ãããŸãã ããã¯ãWinPhoneã®Switchã³ã³ãããŒã«å
ã«ããµã€ãºã倧ããããã°ãªããããã«ãããããã§ãã ãã®åäœã¯WinPhoneã«åºæã§ãããããPCLã¬ãã«ã§ã¯ãªããã¹ã€ããã®ã¬ã³ããªã³ã°ã§è§£æ±ºããå¿
èŠããããŸãã WinPhoneã®ãã€ãã£ããœãªã¥ãŒã·ã§ã³ã¯ãã¹ã€ããã³ã³ãããŒã«ã®ããã©ã«ãã¹ã¿ã€ã«ããªãŒããŒã©ã€ãããããå¿
èŠãªã¹ã€ããã®ã¹ã¿ã€ã«ã®ã¿ããªãŒããŒã©ã€ãããããšã§ãã PCLéšåã§ã¯ãããã§ããªãããšã¯æããã§ãããXamarin.WinPhoneã1ã¬ãã«äžã«äžããå¿
èŠããããŸãã
Xamarin.WinPhoneã¬ãã«ã§ã¯ãæ°ããããã©ã«ãã¹ã¿ã€ã«ãèšå®ã§ããŸãããå¿
èŠãªã³ã³ãããŒã«ã«ã®ã¿ã¹ã¿ã€ã«ãé©çšããããšã¯ã§ããŸããã ã°ãªããå
ã«ããã¹ã€ããã®ã¿ã®å€èŠ³ãå€æŽããä»ã®ã¹ã€ããã«ã¯è§Šããªãããã«ããå¿
èŠãããããããã®åé¡ã解決ããŸãããã
åè¿°ããããã«ããã©ãããã©ãŒã ã¬ãã«ã§ã¯ãã³ã³ãããŒã«ã¯ã¬ã³ãã©ãŒã§è¡šãããŸãã ãã®ãããã³ã³ãããŒã«ã«å€æŽãå ããã«ã¯ããã®ã¬ã³ãã©ãŒãç·šéããå¿
èŠããããŸãã çŸåšãç§ãã¡ã®ã¿ã¹ã¯ã¯ä»ã®ã¹ã€ããã«åœ±é¿ãäžããã«ã¹ã€ããã®åäœã®ã¿ãä¿®æ£ããããšã§ãããããæãåçŽãªè§£æ±ºçã¯ã¹ã€ããã®ç¶æ¿è
ãäœæãïŒå°æ¥äœ¿çšããïŒããã®äžã«ã¬ã³ãã©ãŒãäœæããããšã§ãïŒæšæºã®ButtonRendererããç¶æ¿ãããŸãïŒã ãã®ã¬ã³ãã©ãŒã§ã¯ãèŠèŠçãªã³ã³ãããŒã«ããªãŒãå¿
èŠã«å¿ããŠå€æŽã§ããŸãã ããšãã°ã次ã®ããã«ïŒ
Control switchControl = VisualTreeHelper.GetChild(Control, 0) as Control; Border border = VisualTreeHelper.GetChild(switchControl, 0) as Border; Grid grid = VisualTreeHelper.GetChild(border, 0) as Grid; grid.Height = 40;
ãŸããGetDesiredSizeã¡ãœããã§æ£ãããµã€ãºãè¿ãããšãå¿ããªãã§ãã ããïŒ
public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) { SizeRequest result = base.GetDesiredSize(widthConstraint, heightConstraint); result.Request = new Size(result.Request.Width, 40); return result; }
ãã®çµæã次ã®çµæãåŸãããŸãã

ãžã§ã¹ãã£ãŒåå
次ã®äŸã§ã¯ãæ°ããã¿ã¹ã¯ããããšä»®å®ããŸããç»é¢ã®ããé åã§ãã¹ãŠã®ãžã§ã¹ãã£ãŒãããã¯ããå¿
èŠããããŸãã å€ãã®ã³ã³ãããŒã«ãããããããã®äžéšã¯ããèªäœã§ãžã§ã¹ãã£ãŒããã£ããããŸãïŒããšãã°ããšãã£ã¿ãŒããã¿ã³ïŒããããã£ãŠãããã¯ããããã®åäžã®ãšã³ããªãã€ã³ãã¯ãããŸããã ãã®å Žåãç°¡åãªè§£æ±ºçããããŸããç®çã®é åã®äžã«éæãªããã«ã眮ããInputTransparentããããã£ãfalseã«èšå®ããŸãã ãã®ããããã£ã¯ããžã§ã¹ãã£ãèŠçŽ ã®ããªãŒã«æ²¿ã£ãŠããã«ã¹ã¯ããŒã«ããã®ãæ¢ãããšããäºå®ã«æ£ç¢ºã«é¢äžããŠããŸãã ãããã£ãŠã次ã®ããã«èšè¿°ããå ŽåïŒ
<Grid> <Switch VerticalOptions="Center" HorizontalOptions="Center"/> <ContentView VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" InputTransparent="false"/> </Grid>
åäœããã¯ãã§ãã¹ã€ãããæŒããªãã§ãã ããã ãããŠå®éãããã¯ãŸãã«iOSã§èµ·ããããšã§ãã ãã ããAndroidã§ããããã§ãã¯ãããšãã¹ã€ãããæŒããããŸãŸã«ãªããŸãã ã芧ã®ãšãããAndroidã¯InputTransparentããããã£ã®èšå®ãç¡èŠããŸãã ãããä¿®æ£ããã«ã¯ãåã®äŸã®ããã«è¡ããŸã-ContentViewã®ç¶æ¿è
ãäœæãã次ã®ã¬ã³ãã©ãŒãäœæããŸãã
public class MyContentViewRenderer : Xamarin.Forms.Platform.Android.VisualElementRenderer<MyContentView> { public override bool DispatchTouchEvent(Android.Views.MotionEvent e) { return !Element.InputTransparent; } }
DispatchTouchEventã¡ãœããããªãŒããŒã©ã€ãããŸãããã®ã¡ãœããã¯ãžã§ã¹ãã£ãã¹ããŒããã ãã§ãPCLãªããžã§ã¯ãã®èšå®ãããInputTransparentã«å¿ããŠå€ãè¿ããŸãã ãã®åé¡ã解決ããŸããã
ããã©ã«ãã®ã¬ã€ã¢ãŠãã®éã
èŠçŽ ã¯ããã©ãããã©ãŒã ããšã«ããããã£ã®ããã©ã«ãå€ãç°ãªãå ŽåããããŸãã ããšãã°ãã¬ã€ã¢ãŠãã ãã®ããã«ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããšãããšïŒ
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="DefaultLayout.MyContentPage"> <Switch /> </ContentPage>
次ã«ãiOSããã³WinPhoneã§ãããã®çµæãååŸããŸãã

Androidã§ã¯ãWinPhoneãšåãã«ãªããŸãã ã芧ã®ãšãããç»é¢äžã®ããŸããŸãªå Žæã«ã³ã³ãããŒã«ã衚瀺ãããŠããŸãã ãããã£ãŠãåžžã«ããã©ã«ãã®ããããã£å€ã«äŸåããå¿
èŠã¯ãããŸããã ãã®ãããªããšãèµ·ãããªãããã«ãèªåèªèº«ãä¿è·ãããããã®å€ãèšå®ããæ¹ãè¯ãã§ãã
æ§èœ
ãŸããPCLããŒãã®æœè±¡åã®è¿œå ã¬ãã«ã«ãããã¢ããªã±ãŒã·ã§ã³ã«æ°ãããã¬ãŒããè¿œå ãããŸãã é床ã®ç¹ã§ã¯ãXamarin.Formsäžã®ã¢ããªã±ãŒã·ã§ã³ã¯ããã€ãã£ãã®ãã®ãããªã倱ãå¯èœæ§ããããŸãã ç¹ã«ãããžã¥ã¢ã«ããªãŒå
šäœãé »ç¹ã«åæç»ããããšãéåžžã«å¥œãããšãèæ
®ããŠãã ããã
ããã§ã©ããã£ãŠçããã®ïŒ
ãã§ã«ç€ºããããã«ããã®ãããªåé¡ãåé¿ããããã«ã¯ããã€ãã£ãã¢ãã€ã«ããŒãã«ã¯ããŒã«ããèŠçŽ ã®ã¬ã³ãã©ãŒãäœæããå¿
èŠããããã©ã®ããã©ã«ãã¬ã³ãã©ãŒã察åŠã§ããªãããæ¢ã«æ±ºå®ããŠããŸãã
å人çã«ã¯ãPCLããä»»æã®ãžã§ã¹ãã£ãŒããµãã¹ã¯ã©ã€ãã§ããããã«ãããžã§ã¹ãã£ãŒãã³ãã©ãŒãå®å
šã«äœæãããã¹ãŠã®ãšãã£ã¿ãŒã®ã¬ã³ãã©ãŒãäœæããŠãããã«äžè¶³ããŠããããããã£ãåŒãåºããŸããã InputTransparentã®åé¡ã¯ãAndroidã®ã¬ã³ãã©ãŒãšãã®ãžã§ã¹ãã£ãŒã®ãããã¯ã«ãã£ãŠåã³è§£æ±ºãããŸããã ããŠãã¬ã³ãã©ãŒã«ç»ããšãã¯ãã¬ã³ããªã³ã°ããã·ã¹ãã ã®ãã€ãã£ãAPIããã§ã«åŠçããå¿
èŠããããŸãã ãããŠãããã¯ãã§ã«ãã®APIãåŠã¶å¿
èŠããããŸãã ã§ããããæåã«ãããåŠã¶å¿
èŠã¯ãªããšæåã«è¿°ã¹ãã®ã¯ç¡é§ã§ã¯ãããŸããã§ããã
ãããããããã®åé¡ã¯ãã¹ãŠäœããã®åœ¢ã§åé¿ãããŠããŸãã ãããŠãæçµçã«ãã®ãã¬ãŒã ã¯ãŒã¯ã§GridControlãäœæããããšãã§ããŸããã ããŒã¿ã衚瀺ããã³æäœããããã®ååã«å€§ããªæ©èœãåããŠããŸãã 次ã®ããã«ãªããŸãã

ã°ãªããã¯éåžžã«é«éã§æ©èœãè±å¯ã§ããããšãå€æããŸããã ãã ããXamarin.Formsã«é¢ãã次ã®èšäºã§ãããã«ã€ããŠè©³ãã説æããŸãã
çµè«ãšããŠãXamarin.Formsã¯ãäžåºŠã«è€æ°ã®ãã©ãããã©ãŒã ã§ã¯ã€ãã¯ã¹ã¿ãŒããå¿
èŠãªå Žåãããã©ãŒãã³ã¹ãããã»ã©éèŠã§ã¯ãªãå ŽåããŸãã¯æ°ããã¢ããªã±ãŒã·ã§ã³ã§åå©çšãããå€ãã³ãŒããããããããå Žåã«äœ¿çšã§ãããšèšããããšæããŸãã ãŸããæçµçãªã¢ããªã±ãŒã·ã§ã³ã®çŸãããããéçºé床ã®æ¹ãéèŠã§ãããããäŒæ¥ã®ããã°ã©ããŒã«ãšã£ãŠãéåžžã«åœ¹ç«ã¡ãŸãã
ãã¡ãããéåžžãšã¯ç°ãªããã¶ã€ã³ãäœæ¥ã®é«éåãéèŠã§ãããåºèã§è²©å£²ããã¢ããªã±ãŒã·ã§ã³ãäœæããå Žåã¯ããã€ãã£ãã¢ãŒããŸãã¯Xamarin Mobileã§äœæããæ¹ãããå ŽåããããŸãã çŸåšãXamarinããŒã ã¯ç©æ¥µçã«è£œåãéçºããŠããŸãããã¢ããããŒãã¯é »ç¹ã«ãªãªãŒã¹ãããŸãã ãããã£ãŠãXamarin.Formsã®ç¯å²ãæ¡å€§ããããšãæãŸããŸãã
æŽæ°ïŒGridControlã«é¢ãã詳现æ
å ±ã¯ãDevExpress
ããã®Xamarinã®ç¡æã°ãªããã³ã³ãããŒã«ã®èšäº
ãã芧ãã ããã