【问题标题】:Xamarin Forms ImageButton gets smaller after changing Source dynamicallyXamarin Forms ImageButton 在动态更改 Source 后变小
【发布时间】:2019-02-16 21:07:13
【问题描述】:

我在“语言页面”上有 3 个 ImageButton,它们代表应用程序 (Android) 的 3 种不同语言。

<ContentPage.Resources>
    <ResourceDictionary>
        <Style x:Key="flagsImageButtonStyles" TargetType="ImageButton">
            <Setter Property="HeightRequest"
                    Value="130" />
            <Setter Property="WidthRequest"
                    Value="130" />
            <Setter Property="Aspect" Value="AspectFill" />
            <Setter Property="BackgroundColor" Value="Transparent" />
        </Style>
    </ResourceDictionary>
</ContentPage.Resources>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1.5*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="Auto"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    ...

    <ImageButton Grid.Row="1" StyleId="fr" Grid.Column="1" x:Name="btnFrench" Clicked="LanguageButton_Clicked" Style="{StaticResource flagsImageButtonStyles}"/>
    <ImageButton Grid.Row="2" StyleId="nl" Grid.Column="1" x:Name="btnDutch" Clicked="LanguageButton_Clicked" Style="{StaticResource flagsImageButtonStyles}"/>
    <ImageButton Grid.Row="3" StyleId="en" Grid.Column="1" x:Name="btnEnglish" Clicked="LanguageButton_Clicked" Style="{StaticResource flagsImageButtonStyles}"/>

</Grid>

我这样设置 ImageButtons 的来源:

protected override void OnAppearing()
    {
        switch (CrossMultilingual.Current.CurrentCultureInfo.TwoLetterISOLanguageName) // "fr", "nl", "en"
        {
            case "fr":
                btnFrench.Source = "fr_flag_selected.png";
                btnDutch.Source = "nl_flag.png";
                btnEnglish.Source = "en_flag.png";
                break;

            case "nl":
                btnFrench.Source = "fr_flag.png";
                btnDutch.Source = "nl_flag_selected.png";
                btnEnglish.Source = "en_flag.png";
                break;

            case "en":
                btnFrench.Source = "fr_flag.png";
                btnDutch.Source = "nl_flag.png";
                btnEnglish.Source = "en_flag_selected.png";
                break;
        }
        base.OnAppearing();
    }

每当我单击其中一个时,我都会设置语言并导航到另一个页面。

所以下次加载“语言页面”时,它会检查当前语言并调整 ImageBUtton 的 Source。

问题是,每当我单击其中一个 ImageButton 或应用程序进入睡眠状态时,ImageButton 都会变得非常小。

任何想法,可能有什么问题?

【问题讨论】:

  • 尝试在图像上设置高度/宽度请求值
  • 我已经这样做了,在上面的样式中
  • 出于好奇,为什么你有三列而只有第二列是自动的?

标签: android xamarin.forms imagebutton


【解决方案1】:

已经解决了。

我必须为 ImageButton 的行和列定义指定相同的高度/宽度请求:

<Grid.RowDefinitions>
        <RowDefinition Height="1.5*"></RowDefinition>
        <RowDefinition Height="130"></RowDefinition>
        <RowDefinition Height="130"></RowDefinition>
        <RowDefinition Height="130"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"></ColumnDefinition>
        <ColumnDefinition Width="130"></ColumnDefinition>
        <ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多