我正在为我制作一个 Xamarin 应用程序来查看我的报告和日志,而且我对 Xamarin 很陌生。
我想在同一页面上显示大约 4 次 800 个彩色标签。所以我制作了一个自定义 ExpanderPanel,它不会加载正文模板,直到我单击展开它。在 Expander Body 模板中,我有一个带有 800 标签的 FlexLayout:
<FlexLayout Wrap="Wrap" Direction="Row"
BindableLayout.ItemsSource="{Binding ProcessStatus.ResearchesDone}">
<BindableLayout.ItemTemplate>
<DataTemplate x:DataType="localmodels:ResearchDone">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label HorizontalOptions="Center"
HorizontalTextAlignment="Center"
VerticalOptions="Center"
Text="{Binding Postcode, Mode=OneTime}" />
<Label Grid.Row="1"
VerticalOptions="Center"
HorizontalOptions="FillAndExpand"
Margin="2"
HorizontalTextAlignment="Center"
Text="{Binding PercentParsed, StringFormat=' {0}% ', Mode=OneTime}"
BackgroundColor="{Binding PercentParsed, Converter={conv:PercentToColorRGConverter}, Mode=OneTime}">
<Label.Triggers>
<DataTrigger TargetType="Label" Binding="{Binding Count, Mode=OneTime}" Value="0">
<Setter Property="IsVisible" Value="False" />
</DataTrigger>
</Label.Triggers>
</Label>
<Grid.Triggers>
<DataTrigger Binding="{Binding Count, Mode=OneTime}" TargetType="Grid" Value="0">
<Setter Property="BackgroundColor" Value="Orange" />
</DataTrigger>
<DataTrigger Binding="{Binding Failed, Mode=OneTime}" TargetType="Grid" Value="True">
<Setter Property="BackgroundColor" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding IsRunning, Mode=OneTime}" TargetType="Grid" Value="true">
<Setter Property="BackgroundColor" Value="Teal" />
</DataTrigger>
</Grid.Triggers>
<Grid.GestureRecognizers>
<TapGestureRecognizer NumberOfTapsRequired="1" Tapped="TapGestureRecognizer_Tapped">
</TapGestureRecognizer>
</Grid.GestureRecognizers>
</Grid>
</DataTemplate>
</BindableLayout.ItemTemplate>
</FlexLayout>
问题是当我想展开一个面板时,加载 800 个标签大约需要 5-10 秒。有没有办法优化这个?或者在加载标签时不阻塞 UI 线程。因为一旦加载,我可以轻松地展开和取消展开我的扩展器。
这是扩展器在第一次扩展时创建他的正文内容时的代码:
var content = (View)expander.BodyContentTemplate.CreateContent();
expander.BodyContentView.Content = content;
这是第二行,需要 5-10 秒。
我可以使用其他组件代替标签吗?
我可以做的一个解决方案是用我的信息绘制图像。但我需要处理对正确报告的点击。而且因为我在 UWP 上,屏幕宽度可以改变,我没有看到如何处理屏幕尺寸改变事件。