0

我正在为我制作一个 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 上,屏幕宽度可以改变,我没有看到如何处理屏幕尺寸改变事件。

4

0 回答 0