xaml - 如何在 FlexLayout 中包装标签
问题描述
我正在使用 Xamarin Cross-platform,我的主要目标平台是 UWP 和辅助 iOS。我正在尝试在 ListView 中使用 FlexLayout,它可能包含我想在定义的 FlexLayout 基础中包装的长标签文本。
这是我到目前为止编写的代码:为简单起见,我使用静态数据,真实数据将动态绑定。
<ListView.ItemTemplate>
<FlexLayout Direction="Row" Wrap="Wrap" Margin="0,10,0,10">
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="1. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="2. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="3.A long Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="4.A very loooooong Label header with long value"/>
<Label Text="A long Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="5. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="6. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="7. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="8. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="9. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" FlexLayout.Basis="300">
<Label Text="10. Label header"/>
<Label Text="Label Value"></Label>
</StackLayout>
</FlexLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
这将产生以下输出: 示例输出
我们可以看到第四个堆栈的数据(4.A very loooooong Label header with long value)被截断。
但我希望我的输出是这样的:期望的输出
这里要记住的是:
- 我想最大限度地利用空间。
- 我不喜欢使用 Wrap Layout。
- 数据可以是任何长度,我无法定义它的最小或最大长度。
- 数据是动态的,将在运行时绑定,这里使用静态数据只是为了简单起见。
- 想要每一行中每个栈的宽度相等,高度必须根据数据要求而变化。
解决方案
我想最大限度地利用空间。
据我了解,您正在利用最大可用空间。
我不喜欢使用 Wrap Layout。
从未听说过 xamarin 表单中的换行布局,但如果您的意思是不想使用 LineBreakMode,那么这是实现您的要求的唯一方法。
数据可以是任意长度,我无法定义它的最小或最大长度。
没关系,问题不在于 flex 布局,而是设置标签 LineBreakMode 属性的标签可以解决问题
如果您觉得文本太长,请添加如下内容:
<Label ..... LineBreakMode="WordWrap"/>
数据是动态的,将在运行时绑定,这里使用静态数据只是为了简单起见。
除非您的 XAML 编写得很好,否则不会有任何改变,它不会表现得很奇怪
想要每一行中每个栈的宽度相等,高度必须根据数据要求而变化。
在这种情况下,我建议您将StackLayout
内部 aGrid
而不是 a包装起来FlexLayout
,然后将 RowDefinitions 设置为 Auto,以便它们根据需要适合自己。
推荐阅读
- tailwind-css - 我怎样才能让这个盒子有相同的宽度?
- jpa - JPA生成策略表和序列的区别
- c++ - 创建子类的多个实例,只有一个超类的实例
- flutter - 如何对按钮进行编程以在点击和保持时连续增加或减少计数器?
- flutter - Flutter ListView itembuilder 不会显示任何内容。为什么?
- swiftui - iOS SwiftUI 在与代码交互时如何调出“嵌入 VStack”之类的额外操作?
- maven - 防止部署 Maven 模块
- python - 在 tensorflow 和 keras 上运行我的 Rnn 模型时出现 InvalidArgumentError
- angular - md-icon' 在使用 Angular Material 8.2.3 时不是已知元素错误,即使已导入 --
- javascript - document.getElementById("").focus() 不关注所需的项目。使用 setTimeout 的某些超时值有时会起作用