私はXamarin.Formsのこの動作について本当に混乱しています。私は、このページがあります。FindByNameは最初のエントリでは機能しますが、2番目のエントリではnullが返されます...?
<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:GW.Frontend.XF"
x:Class="GW.Frontend.XF.AppPage">
<StackLayout x:Name="mainLayout" Padding="20,20,20,20">
<Label Text="Welcome to GW" x:Name="welcomeLabel"
VerticalOptions="Center" HorizontalOptions="Center" />
<Entry x:Name="passphraseEntry" IsPassword="true"
Placeholder="Input your new pass-phrase:"
TextChanged="OnPassphraseTextChanged" />
<Entry x:Name="passphraseEntryConfirmation" IsPassword="true"
Placeholder="Repeat your passphrase here"
TextChanged="OnPassphraseTextChanged" />
<Button x:Name="createButton"
Text="Create my accounts" IsEnabled="false"
HorizontalOptions="Center"
Clicked="OnCreateButtonClicked" />
</StackLayout>
</ContentPage>
をそして、これはAppPage.xaml.fsのコードです:驚いたことに
namespace GW.Frontend.XF
open System
open Xamarin.Forms
open Xamarin.Forms.Xaml
type AppPage() =
inherit ContentPage()
let _ = base.LoadFromXaml(typeof<AppPage>)
let mainLayout = base.FindByName<StackLayout>("mainLayout")
let passphrase = mainLayout.FindByName<Entry>("passphraseEntry")
let passphraseConfirmation = mainLayout.FindByName<Entry>("passphraseEntryConfirmation")
let createButton = mainLayout.FindByName<Button>("createButton")
member this.OnCreateButtonClicked(sender: Object, args: EventArgs) =
()
member this.OnPassphraseTextChanged(sender: Object, args: EventArgs) =
Console.WriteLine("______________________A")
if (passphrase.Text.Length > 0) then
Console.WriteLine("______________________B")
if (passphraseConfirmation.Text.Length > 0) then
Console.WriteLine("______________________C")
createButton.IsEnabled <- true
(___Bがコンソールに印刷されているので)、パスフレーズがnullではないですが、passphraseConfirmationですヌル! (したがって、NullReferenceExceptionをスローします。)これはどのようにすることができますか?私は、StackLayoutコンテナの最初の要素だけでなく、すべての場合にFindByName
が動作すると期待しています。