最小宽度的Xaml Xamarin网格柱填充
我得到了以下网格(a的一部分):最小宽度的Xaml Xamarin网格柱填充,xaml,xamarin,data-binding,Xaml,Xamarin,Data Binding,我得到了以下网格(a的一部分): <Grid Grid.Row="0" StyleClass="headerBar"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <StackLayout G
<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>
结果:
问题:
我试图实现的是将按钮的宽度填充到剩余的空间,同时保留最小宽度,这样它就不会超出文本本身的宽度。我在ColumnDefinition中找到了MinWidth,但在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*)得到了一个临时解决方案,但是,如果标签内的文本太大,标签似乎会保留两条额外的白线。为什么会这样?
我的意思是:
您可以这样更改:(定义网格.RowDefinitions)
将行定义设置为“自动”只会使其如此,但这可能是因为我使用的是Fill而不是FillAndexpand。是的,奇怪的是,我最初通过添加行定义属性消除了额外的两行空白,但现在不添加该属性,也没有额外的空行,那么现在有什么问题?和ColumnDefinition Width
您可以像上面那样更改,然后您不必将Width设置为50%。上面的屏幕截图来自整个网格行。它仍然保留那些空白的白线,但是按钮不再填充(我已经修复了)。
<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>