我正在學習一種顯示驗證錯誤的新方法,并且我遇到了非常奇怪的表單問題,當我單擊“添加”按鈕時,被推到螢屏下方的控制元件消失或變得透明。
這是我的表格https://i.stack.imgur.com/LIrD6.jpg
當我單擊添加按鈕時,會發生這種情況https://i.stack.imgur.com/PWZLZ.jpg(注意:這是一個擴展的螢屏截圖,我的螢屏以電話號碼控制結束。當我滾動時,剩余的空白區域用于添加按鈕)
當我單擊/關注任何控制元件時,螢屏會自行修復https://i.stack.imgur.com/Exw4z.jpg
我正在使用 shell 應用程式,不知道這里出了什么問題。任何幫助表示贊賞。
這是我的代碼
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
x:Class="PROOF.Views.Patient.NewPatientPage"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
xmlns:vm="clr-namespace:PROOF.ViewModels"
xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
Title="{Binding PageTitle}"
ios:Page.UseSafeArea="true"
x:DataType="vm:NewPatientViewModel"
Shell.TabBarIsVisible="False"
Visual="Material">
<ContentPage.Resources>
<ResourceDictionary>
<xct:InvertedBoolConverter x:Key="InvertedBoolConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<ScrollView>
<Grid Margin="10">
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<Label Style="{DynamicResource HeadingLabel}" Text="Patient Info" />
<Entry
Placeholder="First Name"
Style="{DynamicResource DefaultEntry}"
Text="{Binding PatientFirstName}">
<Entry.Behaviors>
<xct:TextValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding PatientFirstNameValid}"
RegexPattern="^(?!\s*$). " />
</Entry.Behaviors>
<Entry.Triggers>
<DataTrigger
Binding="{Binding PatientFirstNameValid}"
TargetType="Entry"
Value="False">
<Setter Property="PlaceholderColor" Value="{StaticResource Error}" />
</DataTrigger>
</Entry.Triggers>
</Entry>
<Label
IsVisible="{Binding PatientFirstNameValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="First Name is required." />
<Entry
Placeholder="Last Name"
Style="{DynamicResource DefaultEntry}"
Text="{Binding PatientLastName}">
<Entry.Behaviors>
<xct:TextValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding PatientLastNameValid}"
RegexPattern="^(?!\s*$). " />
</Entry.Behaviors>
<Entry.Triggers>
<DataTrigger
Binding="{Binding PatientLastNameValid}"
TargetType="Entry"
Value="False">
<Setter Property="PlaceholderColor" Value="{StaticResource Error}" />
</DataTrigger>
</Entry.Triggers>
</Entry>
<Label
IsVisible="{Binding PatientLastNameValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Last Name is required." />
<Entry
Keyboard="Email"
Placeholder="Email"
Style="{DynamicResource DefaultEntry}"
Text="{Binding PatientEmail}">
<Entry.Behaviors>
<xct:EmailValidationBehavior
DecorationFlags="Trim"
Flags="ValidateOnValueChanging"
IsValid="{Binding PatientEmailValid}" />
</Entry.Behaviors>
<Entry.Triggers>
<DataTrigger
Binding="{Binding PatientEmailValid}"
TargetType="Entry"
Value="False">
<Setter Property="PlaceholderColor" Value="{StaticResource Error}" />
</DataTrigger>
</Entry.Triggers>
</Entry>
<Label
IsVisible="{Binding PatientEmailValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Email is required." />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackLayout Grid.Column="0">
<Picker
Title="Year"
ItemsSource="{Binding DobYears}"
SelectedItem="{Binding SelectedDobYear}"
Style="{DynamicResource DefaultPicker}">
<Picker.Behaviors>
<xct:TextValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding SelectedDobYearValid}"
RegexPattern="^(?!\s*$). " />
</Picker.Behaviors>
<Picker.Triggers>
<DataTrigger
Binding="{Binding SelectedDobYearValid}"
TargetType="Picker"
Value="False">
<Setter Property="TitleColor" Value="{StaticResource Error}" />
</DataTrigger>
</Picker.Triggers>
</Picker>
<Label
IsVisible="{Binding SelectedDobYearValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Year is required." />
</StackLayout>
<StackLayout Grid.Column="1">
<Picker
Title="Month"
ItemsSource="{Binding DobMonths}"
SelectedItem="{Binding SelectedDobMonth}"
Style="{DynamicResource DefaultPicker}">
<Picker.Behaviors>
<xct:TextValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding SelectedDobMonthValid}"
RegexPattern="^(?!\s*$). " />
</Picker.Behaviors>
<Picker.Triggers>
<DataTrigger
Binding="{Binding SelectedDobMonthValid}"
TargetType="Picker"
Value="False">
<Setter Property="TitleColor" Value="{StaticResource Error}" />
</DataTrigger>
</Picker.Triggers>
</Picker>
<Label
IsVisible="{Binding SelectedDobMonthValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Year is required." />
</StackLayout>
<StackLayout Grid.Column="2">
<Picker
Title="Day"
ItemsSource="{Binding DobDays}"
SelectedItem="{Binding SelectedDobDay}"
Style="{DynamicResource DefaultPicker}">
<Picker.Behaviors>
<xct:TextValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding SelectedDobDayValid}"
RegexPattern="^(?!\s*$). " />
</Picker.Behaviors>
<Picker.Triggers>
<DataTrigger
Binding="{Binding SelectedDobDayValid}"
TargetType="Picker"
Value="False">
<Setter Property="TitleColor" Value="{StaticResource Error}" />
</DataTrigger>
</Picker.Triggers>
</Picker>
<Label
IsVisible="{Binding SelectedDobDayValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Year is required." />
</StackLayout>
</Grid>
<Label Style="{DynamicResource HeadingLabel}" Text="Guardian Info" />
<Entry
Placeholder="First Name"
Style="{DynamicResource DefaultEntry}"
Text="{Binding GuardianFirstName}">
<Entry.Behaviors>
<xct:TextValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding GuardianFirstNameValid}"
RegexPattern="^(?!\s*$). " />
</Entry.Behaviors>
<Entry.Triggers>
<DataTrigger
Binding="{Binding GuardianFirstNameValid}"
TargetType="Entry"
Value="False">
<Setter Property="PlaceholderColor" Value="{StaticResource Error}" />
</DataTrigger>
</Entry.Triggers>
</Entry>
<Label
IsVisible="{Binding GuardianFirstNameValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="First Name is required." />
<Entry
Placeholder="Last Name"
Style="{DynamicResource DefaultEntry}"
Text="{Binding GuardianLastName}">
<Entry.Behaviors>
<xct:TextValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding GuardianLastNameValid}"
RegexPattern="^(?!\s*$). " />
</Entry.Behaviors>
<Entry.Triggers>
<DataTrigger
Binding="{Binding GuardianLastNameValid}"
TargetType="Entry"
Value="False">
<Setter Property="PlaceholderColor" Value="{StaticResource Error}" />
</DataTrigger>
</Entry.Triggers>
</Entry>
<Label
IsVisible="{Binding GuardianLastNameValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Last Name is required." />
<Entry
Keyboard="Email"
Placeholder="Email"
Style="{DynamicResource DefaultEntry}"
Text="{Binding GuardianEmail}">
<Entry.Behaviors>
<xct:EmailValidationBehavior
DecorationFlags="Trim"
Flags="ValidateOnValueChanging"
IsValid="{Binding GuardianEmailValid}" />
</Entry.Behaviors>
<Entry.Triggers>
<DataTrigger
Binding="{Binding GuardianEmailValid}"
TargetType="Entry"
Value="False">
<Setter Property="PlaceholderColor" Value="{StaticResource Error}" />
</DataTrigger>
</Entry.Triggers>
</Entry>
<Label
IsVisible="{Binding GuardianEmailValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Email is required." />
<Entry
Keyboard="Numeric"
Placeholder="Phone Number"
Style="{DynamicResource DefaultEntry}"
Text="{Binding PhoneNumber}">
<Entry.Behaviors>
<xct:CharactersValidationBehavior
Flags="ValidateOnValueChanging"
IsValid="{Binding PhoneNumberValid}"
MinimumCharacterCount="10" />
</Entry.Behaviors>
<Entry.Triggers>
<DataTrigger
Binding="{Binding PhoneNumberValid}"
TargetType="Entry"
Value="False">
<Setter Property="PlaceholderColor" Value="{StaticResource Error}" />
</DataTrigger>
</Entry.Triggers>
</Entry>
<Label
IsVisible="{Binding PhoneNumberValid, Converter={StaticResource InvertedBoolConverter}}"
Style="{DynamicResource ValidationLabel}"
Text="Phone Number is required." />
<StackLayout IsVisible="{Binding IsAddViewVisible}">
<Button
Padding="5"
Command="{Binding AddCommand}"
Style="{x:StaticResource DefaultButton}"
Text="Add"
TextColor="White" />
</StackLayout>
<StackLayout Padding="0,10">
<StackLayout IsVisible="{Binding IsEditViewVisible}" Orientation="Horizontal">
<Button
Padding="5"
BackgroundColor="{x:StaticResource Error}"
Command="{Binding DeleteCommand}"
HorizontalOptions="FillAndExpand"
Text="Delete" />
<Button
Padding="5"
Command="{Binding EditCommand}"
HorizontalOptions="FillAndExpand"
Style="{x:StaticResource DefaultButton}"
Text="Edit"
TextColor="White" />
</StackLayout>
</StackLayout>
</StackLayout>
</Grid>
</ScrollView>
</ContentPage.Content>
</ContentPage>
uj5u.com熱心網友回復:
您可以從 ScrollView 中添加 StackLayout。
請參考以下代碼:
<!--add a StackLayout out of the ScrollView-->
<StackLayout>
<ScrollView VerticalOptions="EndAndExpand">
<!--other code-->
</ScrollView>
</StackLayout>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425093.html
