Xamarin网格未均匀分割

时间:2019-05-17 22:12:58

标签: xaml listview xamarin xamarin.forms grid

我希望包含在ListView DataTemplate单​​元格中的两个标签在屏幕上均匀地水平分割。

据我了解, 如果您使用网格并将两个cmd.exe设置为ColumnDefinitions,则它应该可以工作。我试过了,它没有按预期显示。

我必须在第一个Label上添加一个大的1*才能使其正常工作。

我还尝试将Grid上的WidthRequest和标签设置为HorizonalOptions,但没有结果。

FillAndExpand

没有<ViewCell> <Frame HasShadow="true" Margin="2"> <StackLayout Orientation="Horizontal" Margin="0,0,0,0" > <StackLayout WidthRequest="20" BackgroundColor="{Binding RYGStatusColor}" > <Label Text="{Binding RYGStatusLetter}" HorizontalTextAlignment="Center" FontSize="Medium" FontAttributes="Bold" TextColor="White" /> </StackLayout> <StackLayout Orientation="Vertical"> <Label Text="{Binding ProgramName}" FontSize="Medium" FontAttributes="Bold" /> <Label Text="{Binding DesignCustomerName}" FontSize="Small" /> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Label Grid.Row="0" Grid.Column="0" Text="{Binding EstimatedTotalValue, Converter={StaticResource CurrencyDisplay}}" FontSize="Small" FontAttributes="Bold" WidthRequest="1024" /> <!-- WidthRequest is a hack to force the width to be equal across the screen. --> <Label Grid.Row="0" Grid.Column="1" FontSize="Small"> <Label.FormattedText> <FormattedString> <Span Text="Modified: " /> <Span Text="{Binding ModifiedDate, StringFormat='{0:M/d/yy}', Converter={StaticResource LocalTime}}}" /> </FormattedString> </Label.FormattedText> </Label> </Grid> </StackLayout> </StackLayout> </Frame> </ViewCell> 骇客,我得到了以下结果:Actual Results

Row 1
"Label1           Label2                           "
Row 2
"Label1               Label2                       "

通过黑客攻击,我得到了预期的结果:Expected Results

Row 1
"Label1                   Label2                   "
Row 2
"Label1                   Label2                   "

2 个答案:

答案 0 :(得分:0)

我怀疑Grid正在正确地自我拆分,但是它没有占用您期望的全部空间。尝试将HorizontalOptions="FillAndExpand"添加到网格本身并进行报告。

答案 1 :(得分:0)

  

我希望ListView DataTemplate单​​元格中包含的两个标签在屏幕上均匀地水平分割。据我了解,如果使用Grid并将两个ColumnDefinitions设置为1 *,它应该可以工作。我尝试了此操作,但未按预期显示。

我在ListView datetemplate中使用您的代码,并且不使用widthrequest,得到以下结果。 Xamarin.Form版本是3.4.0.1008975。

enter image description here

代码如下:

<ContentPage.Content>
    <ListView ItemsSource="{Binding models}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="1*" />
                            <ColumnDefinition Width="1*" />
                        </Grid.ColumnDefinitions>
                        <Label
                            Grid.Row="0"
                            Grid.Column="0"
                            BackgroundColor="Blue"
                            FontAttributes="Bold"
                            FontSize="Small"
                            Text="{Binding str1}" />
                        <!--  WidthRequest is a hack to force the width to be equal across the screen.  -->
                        <Label
                            Grid.Row="0"
                            Grid.Column="1"
                            BackgroundColor="Yellow"
                            FontSize="Small">
                            <Label.FormattedText>
                                <FormattedString>
                                    <Span Text="Modified: " />
                                    <Span Text="{Binding str2}" />
                                </FormattedString>
                            </Label.FormattedText>
                        </Label>
                    </Grid>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

</ContentPage.Content>