Xaml Xamarin网格列填充具有最小宽度

时间:2019-03-31 16:53:10

标签: xaml xamarin data-binding

我得到以下网格的(一部分):

<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

我要实现的目的是使按钮的宽度填充到左侧的空间,同时保留最小宽度,以使其不会超出文本本身的宽度。我发现something similar in WDF在ColumnDefinition上具有MinWidth,但是在Xaml中似乎不存在。我很想在Xaml中做到这一点,而不是在后面的代码中解决此问题。

我尝试将ColumnDefinitions绑定到Width,WidthRequest等,并按如下方式进行第一个Column填充(就像它们在上面的链接中所做的那样),但它给出了错误。 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 个答案:

答案 0 :(得分:1)

您可以这样更改:(定义 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>