【问题标题】:Order of element gets changed when it's focused in Grid layout当元素集中在网格布局中时,元素的顺序会发生变化
【发布时间】:2020-01-07 14:00:16
【问题描述】:
我在网格中放置了一些没有任何行和列定义的元素。
<Grid>
<Button x:Name="button" Text="{Binding ButtonText}" CornerRadius="5" />
<Image HorizontalOptions="Start" VerticalOptions="Center" Source="{Binding IconImageSource}" InputTransparent="True"/>
</Grid>
在这里,图像是顶部元素。当按钮被点击时,图像返回。为什么会发生这种情况,有什么办法可以阻止它?
【问题讨论】:
标签:
xaml
xamarin
xamarin.forms
【解决方案1】:
这个原因来自Fast Renderers。
快速渲染器可用于 Android 上 Xamarin.Forms 中的以下控件:
在功能上,这些快速渲染器与传统渲染器没有什么不同。从 Xamarin.Forms 4.0 开始,所有以 FormsAppCompatActivity 为目标的应用程序都将默认使用这些快速渲染器。
可以使用以下方法覆盖快速渲染器:
-
通过在调用Forms.Init 之前将以下代码行添加到您的MainActivity 类来启用旧版渲染器:
Forms.SetFlags("UseLegacyRenderers");
使用以旧版渲染器为目标的自定义渲染器。任何现有的自定义渲染器都将继续与旧版渲染器一起使用。
指定使用不同渲染器的不同View.Visual,例如Material。有关 Material Visual 的更多信息,请参阅Xamarin.Forms Material Visual。
所以,这里 Solution 在 global::Xamarin.Forms.Forms.Init(this, savedInstanceState) 调用之前将以下内容添加到您的 MainActivity.OnCreate:
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
global::Xamarin.Forms.Forms.SetFlags("UseLegacyRenderers"); //add code here
global::Xamarin.Forms.Forms.Init (this, bundle);
LoadApplication (new App ()); // method is new in 1.3
}
效果: