XAML 当我以Android为目标时,为什么不显示ScrollView的内容?

xggvc2p6  于 2022-12-25  发布在  Android
关注(0)|答案(1)|浏览(156)

我有以下非常简单的控件模板:

<ControlTemplate x:Key="BarChartControlTemplate">
<Grid 
    x:Name="Part_Grid"
    BackgroundColor="LightYellow"
    ColumnDefinitions="*,auto">

    <ScrollView
        x:Name="Part_Scroller"
        BackgroundColor="ForestGreen"
        Orientation="Horizontal">

        <Grid
            x:Name="Part_Content"
            BackgroundColor="Orange"/>
    </ScrollView>
</Grid>

如果我运行面向Windows的应用程序,一切都很好;我的Part_Grid显示为浅黄色,Part_Content显示为橙色(绿色的Part_Scroller明显被Part_Content隐藏):

但是,如果我运行面向Android的代码(在物理设备上),橙色的Part_Content将不再显示:

我尝试设置任意大小,但没有成功。
毫不奇怪,如果我将Part_Content从ScrollView中取出,它会正确显示。

<ControlTemplate x:Key="BarChartControlTemplate">
<Grid 
    x:Name="Part_Grid"
    BackgroundColor="LightYellow"
    ColumnDefinitions="*,auto">

    <ScrollView
        x:Name="Part_Scroller"
        BackgroundColor="ForestGreen"
        Orientation="Horizontal">

    </ScrollView>

    <Grid
        x:Name="Part_Content"
        BackgroundColor="Orange"/>
</Grid>

如何解释Windows和Android在ScrollView工作方式上的差异?

    • 更新1:**

问题似乎出在ScrollView的方向上,因为如果我把它切换到垂直,在Android上一切都很好(当然在Windows上也是如此),显然这不是我想要的:我希望能够水平滚动图形。

zsohkypk

zsohkypk1#

我通过在Part_Content中添加以下行或多或少地解决了这个问题:

<Grid
     x:Name="Part_Content"
     HeightRequest="{Binding Source={RelativeSource Mode=Self}, Path=Height}"/>

基本上,使用此绑定,我希望控件的高度与控件的当前高度匹配...
这完全没有意义,我不明白为什么它能起作用,但现在它起作用了。

    • 编辑:**

另一种选择(因为ScrollView在android上似乎有bug)是使用CollectionView(在我的例子中,它将只有一个Grid项-以前的Part_Content-在代码端创建)。

<ControlTemplate x:Key="BarChartControlTemplate">
<Grid 
    x:Name="Part_Grid"
    ColumnDefinitions="*,auto">

    <CollectionView
        x:Name="Part_Scroller"
        ItemsLayout="HorizontalList">

        <CollectionView.ItemTemplate>
            <DataTemplate>
                <ContentView Content="{Binding}"/>
            </DataTemplate>
        </CollectionView.ItemTemplate>
    </CollectionView>
</Grid>
</ControlTemplate>

它在两个平台上都很好用,我不知道我找到的两个解决方案中哪一个最丑。

相关问题