我有一个Xamarin Forms页面,最后我有一个覆盖整个屏幕的StackLayout,只有在我调用它时才能看到 .
StackLayout正确显示,ActivityIndicator也是如此 . 但是我仍然可以点击任何技术上应该在stacklayout下面的控件 .
这是预期的行为吗?在WPF或类似的情况下,当我将控件放在另一个控件之前时,它不允许单击它后面的任何控件 .
XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="Background.png" Aspect="AspectFill"></Image>
<StackLayout Padding="10, 10, 0, 0">
<Image Source="Logo.png" WidthRequest="200" HorizontalOptions="Start" />
</StackLayout>
<RelativeLayout>
<StackLayout x:Name="ContentContainer" BackgroundColor="Black" Opacity="0.7" Orientation="Vertical"
RelativeLayout.XConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Width,
Factor=0}"
RelativeLayout.YConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Height,
Factor=0.33}"
RelativeLayout.WidthConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Width,
Factor=1.00}"
RelativeLayout.HeightConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Height,
Factor=0.33}" >
<StackLayout x:Name="ControlContainer" Orientation="Vertical" VerticalOptions="CenterAndExpand" >
<Entry x:Name="EmailInput" VerticalOptions="Center" Placeholder="Email" HorizontalOptions="Fill" />
<Entry x:Name="PasswordInput" VerticalOptions="Center" Placeholder="Password" HorizontalOptions="Fill" IsPassword="true" />
</StackLayout>
</StackLayout>
</RelativeLayout>
<Grid Grid.Row="1" RowSpacing="0" ColumnSpacing="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<Button x:Name="LoginButton" Text="Login" BackgroundColor="#FFCF3838" HorizontalOptions="FillAndExpand" Grid.Column="1" Grid.Row="0" BorderWidth="1" BorderColor="White" IsEnabled="{Binding Path=LoginViewModel.IsPageEnabled}" />
<Button x:Name="RegisterButton" Text="Register" HorizontalOptions="Fill" BackgroundColor="#FFCF3838" Grid.Column="0" Grid.Row="0" BorderWidth="1" BorderColor="White" IsEnabled="{Binding Path=LoginViewModel.IsPageEnabled}" />
</Grid>
<StackLayout x:Name="LoadingContainer" BackgroundColor="Black" Opacity="0.7" Orientation="Vertical" IsVisible="{Binding Path=LoginViewModel.IsBusy}"
RelativeLayout.XConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Width,
Factor=0}"
RelativeLayout.YConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Height,
Factor=0}"
RelativeLayout.WidthConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Width,
Factor=0}"
RelativeLayout.HeightConstraint=
"{ConstraintExpression Type=RelativeToParent,
Property=Height,
Factor=0}" >
<StackLayout HeightRequest="70" VerticalOptions="CenterAndExpand">
<ActivityIndicator IsVisible="{Binding Path=LoginViewModel.IsBusy}"
IsRunning="{Binding Path=LoginViewModel.IsBusy}"
VerticalOptions="Center"
HorizontalOptions="CenterAndExpand"
Color="{x:Static common:ColorResources.ActivityIndicatorColor}"
RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToParent,
Property=Height,
Factor=0.33}"
RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToParent,
Property=Height,
Factor=0.33}" />
<Label Text="Loading ..." Font="12" TextColor="White" VerticalOptions="Center" HorizontalOptions="Center"></Label>
</StackLayout>
</StackLayout>
</Grid>
StackLayout在开始时isVisible =“false”,内容和按钮都可见且工作正常 . 当isVisible变为true时,StackLayout将使用ActivityIndicator覆盖屏幕 . 如上所述,一切都运行良好但我仍然可以点击最初显示的任何按钮,即使我可以看到StackLayout完全覆盖并位于屏幕顶部 .
1 回答
这是Xaramin.Forms中的一个错误,计划在1.3.0版本中修复
如http://forums.xamarin.com/discussion/25612/xamarin-forms-1-3-0-technology-preview所示