【问题标题】:How can I make my image inside my scrollview/grid fit to the screen width with it's normal size?如何使我的滚动视图/网格中的图像以正常大小适合屏幕宽度?
【发布时间】:2017-01-09 09:56:49
【问题描述】:

我正在使用滚动视图/网格!在我的网格内,我有一个图像、按钮和一个标签。

在此页面中,我从我的数据库中收集了我的图像,这意味着图像会根据您事先单击的类别而有所不同。这意味着图像并不总是相同的高度/宽度。

有些看起来不错(它们以正常高度填满整个屏幕),但有些根本不填满屏幕。如果我做一个AspectFill,一些图片会被截断,我也不想要。我也尝试过Fill,但这会使情况变得更糟。

这是我正在使用的:

    <ScrollView HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand" >
    <StackLayout HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand">

    <Grid>

        <Grid.RowDefinitions>

            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>

        </Grid.RowDefinitions>

        <StackLayout Grid.Row="0" BackgroundColor = "Red" HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand">

            <Image  x:Name="theimage" Aspect = "AspectFit"  HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand" />

            <Button Clicked="clickFunc" TextColor="White" Grid.Row="1" HeightRequest="80" WidthRequest="120" BorderRadius="40" HorizontalOptions="End" VerticalOptions="Start" />

        <StackLayout Grid.Row="1" Padding="10,20,10,0">

            <Label TextColor = "#474747" x:Name="title" Text="" HorizontalOptions="Start" FontFamily="Helvetica Neue" FontAttributes="Bold" />

        </StackLayout>
        </StackLayout>
    </Grid> 
    </StackLayout>
    </ScrollView>

我试图这样做来解决这个问题:

theimage.WidthRequest = App.ScreenWidth;

我从 AppDelegete 获得 ScreenWidth,但 theimage 根本没有改变它的宽度。如果我尝试在 xaml 中像这样手动添加一个数字:

WidthRequest = "500"

图像也没有改变,所以我在图像方面有点没有想法。

那么我该如何调整我的代码,以使我的图像在保持正常尺寸的同时始终完全布局到屏幕宽度?

【问题讨论】:

  • 首先您的网格行高是自动的,其次您可以使用 RowDefinition 和 ColumnDefinition 来固定高度宽度。即,将两个值都设置为 50,如果您遇到问题,请告诉我。
  • 好的,让我看看。我是使用网格的新手,因此我不是 100% 确定
  • 我应该将行高从 Auto 更改为 * 吗?我还添加了&lt;Grid.ColumnDefinitions&gt; &lt;ColumnDefinition Width="*" /&gt; &lt;/Grid.ColumnDefinitions&gt;,我应该在我的图片中添加Grid.Row="0" 吗?
  • 你解决了这个问题吗?我面临同样的问题

标签: c# xaml xamarin xamarin.forms


【解决方案1】:

嗯,是的,您还必须指定 Grid.Row 和 Grid.Column 才能找到网格的确切位置。 我已经更改了您的代码,如下所示:(我更改的值仅用于展示)

    <Grid.RowDefinitions>

        <RowDefinition Height="Auto"/>
        <RowDefinition Height="100"/>

    </Grid.RowDefinitions>

    <StackLayout Grid.Row="0" BackgroundColor = "Red" HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand">

        <Image Grid.Row="1"  x:Name="theimage" Aspect = "AspectFit"  HorizontalOptions = "FillAndExpand" VerticalOptions = "FillAndExpand" />

        <Button Clicked="clickFunc" TextColor="White" Grid.Row="1" HeightRequest="80" WidthRequest="120" BorderRadius="40" HorizontalOptions="End" VerticalOptions="Start" />

    <StackLayout Grid.Row="1" Padding="10,20,10,0">

        <Label TextColor = "#474747" x:Name="title" Text="" HorizontalOptions="Start" FontFamily="Helvetica Neue" FontAttributes="Bold" />

    </StackLayout>
    </StackLayout>
</Grid> 

请参阅 XAML 文档,了解如何使用网格。

http://www.dailyfreecode.com/code/grid-layout-xaml-212.aspx http://www.c-sharpcorner.com/uploadfile/mahesh/grid-in-wpf/

注意:您必须为每一行提供行定义,同样适用于列定义。

【讨论】:

  • 我使用了你的代码,但图像仍然无法适应屏幕宽度
  • 有些图片可以,有些不可以
  • 我添加了:&lt;Grid.ColumnDefinitions&gt; &lt;ColumnDefinition x:Name = "width"/&gt; &lt;/Grid.ColumnDefinitions&gt; 以及将width.Width = App.ScreenWidth; 放入代码中。但还是没有变化
  • 您是否为所有列添加了列定义??
猜你喜欢
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2013-11-24
  • 2012-06-30
  • 2014-05-18
  • 1970-01-01
相关资源
最近更新 更多