Заполнение столбца сетки Xaml Xamarin минимальной шириной - PullRequest
1 голос
/ 31 марта 2019

Я получил (часть) следующую сетку:

<Grid Grid.Row="0" StyleClass="headerBar">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

    <StackLayout Grid.Column="0" HorizontalOptions="Start" Spacing="0"
                 StyleClass="inGrid" x:Name="titleFreqStacklayout">
        <!-- title / current vessel labels. -->
        <Label StyleClass="header"
            Text="OV Frequentie"/>
        <Label StyleClass="headerSub" Grid.Column="0" x:Name="currentVesselLabel" 
            Text="huidig voertuig label"/>
        </StackLayout>

    <!-- vessel selection button. -->
    <Button Grid.Column="1" HeightRequest="40" Margin="0, 0, 2, 0"
            Text="selecteer voertuig" ClassId="selectVesselButton" x:Name="selectVesselButton"
            Clicked="SwitchViewContent"/>
</Grid>

Результат:

enter image description here

проблема:

enter image description here

Я пытаюсь добиться того, чтобы ширина кнопки заполнила оставшееся пространство, сохраняя при этом минимальную ширину, чтобы она необрезать за пределы ширины самого текста.Я нашел что-то похожее в WDF с MinWidth в ColumnDefinition, но в Xaml этого, похоже, не существует.Я хотел бы сделать это в Xaml, вместо того, чтобы исправлять это в коде позади.

Я попытался связать ColumnDefinitions с Width, WidthRequest и т. Д. И получить первую заполнение столбца (как онисделать по ссылке выше) следующим образом, но это дает ошибку.XAML:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="{Binding Width}" BindingContext="{x:Reference selectVesselButton}"/>
</Grid.ColumnDefinitions>

Ошибка:

Значение меньше 0 или не число.

Предположительно, это потому, что значение Width,WidthRequest и т. Д. - это строка (или что-то) вместо целого числа.Если это способ сделать это, как я смогу привести любой тип значения к int?И если это не так, как вы это сделаете?

РЕДАКТИРОВАТЬ: я получил временное решение, установив ширину столбца на 50% (50 *), однако, если текст внутри метки становится слишком большимна этикетке, кажется, зарезервированы две дополнительные белые линии.Почему он это делает?Что я имею в виду:

enter image description here

1 Ответ

1 голос
/ 01 апреля 2019

вы можете изменить следующим образом: (определить Grid.RowDefinitions )

<Grid >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <StackLayout Grid.Column="0" Grid.Row="0"   HorizontalOptions="Start" Spacing="0"
                         StyleClass="inGrid" x:Name="titleFreqStacklayout">
        <!-- title / current vessel labels. -->
        <Label StyleClass="header"
               Text="OV Frequentie"/>
        <Label StyleClass="headerSub" x:Name="currentVesselLabel" 
               Text="huidig voertuig label "/>
            </StackLayout>

        <!-- vessel selection button. -->
        <Button Grid.Column="1" Grid.Row="0" HeightRequest="40" Margin="0, 0, 2, 0" VerticalOptions="CenterAndExpand"
            Text="selecteer voertuig" ClassId="selectVesselButton" x:Name="selectVesselButton" Clicked="SwitchViewContent"
                   />
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...