我想更改 WidthRequest
。因此,我注意到这并没有真正设置元素的宽度。相反,这是一个建议。
例:
我将ListView
作为子代添加到StackLayout
中。我正在为WidthRequest
设置ListView
,但是结果不是我期望的。
this.listView = new ListView
{
ItemsSource = new List<IconMenu>
{
// creation of some entries
// ...
},
ItemTemplate = new DataTemplate(typeof(IconMenuCell)),
RowHeight = 44,
// HERE is the problematic code!
WidthRequest = 10,
};
Content = new StackLayout
{
Orientation = StackOrientation.Horizontal,
Children = {
this.listView,
this.detailView,
},
};
这是
IconMenuCell
的结构/布局:public IconMenuCell()
{
var icon = new Image
{
Aspect = Aspect.AspectFit,
WidthRequest = 40,
};
icon.SetBinding(Image.SourceProperty, "IconSource");
this.textLabel = new Label {
TextColor = Color.Gray,
FontSize = 10,
VerticalOptions = LayoutOptions.Center,
};
this.textLabel.SetBinding(Label.TextProperty, "Text");
View = new StackLayout
{
Orientation = StackOrientation.Horizontal,
Children =
{
icon,
this.textLabel,
},
};
}
将
WidthRequest
设置为10是没有意义的,因为图标本身应该占用40。但是在这里,我得到了整个列表视图的最小宽度。如果将
WidthRequest
设置为60或120,则没有任何区别。结果宽度相同(不是我想要的宽度)。WidthRequest
在这里如何工作?我需要更改一些LayoutOptions
吗? 最佳答案
WidthRequest仅描述下一个布局周期中元素的所需宽度。
为了使其按预期工作,必须满足两个条件:
1)请求的宽度与所有要素(例如,父母的宽度)一致,并且
2)触发布局周期。
宽度请求:https://developer.xamarin.com/api/property/Xamarin.Forms.VisualElement.WidthRequest/
但这很复杂。我建议只用网格替换堆栈布局,然后将每个元素放入所需宽度的列中。
网格示例:https://developer.xamarin.com/api/type/Xamarin.Forms.Grid/
关于xamarin - 了解WidthRequest,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35849565/