- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道如何将堆栈布局放入 xamarin 表单的网格案例中并重复该模式。
我在我的 xaml 中声明了我的网格和堆栈布局。
<Grid x:Name="MyGrid" RowSpacing="0" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackLayout x:Name="MyLayout">
<StackLayout.GestureRecognizers>
<TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"/>
</StackLayout.GestureRecognizers>
</StackLayout>
</Grid>
然后在我的 C# 中我想创建
var test = new List<Product>
{
new Product() {Desc = "DESC", Brand= "HelloWorld", Price= "30", Uri = "UriToPicture" },
new Product() {Desc = "DESC2", Brand= "HelloWorld2", Price= "30", Uri = "UriToPicture" }
};
Image PicProd = new Image { Aspect = Aspect.AspectFit };
PicProd.Source = FileImageSource.FromUri(new Uri(test[0].Uri));
Label Name= new Label { Text = test[0].Marque.ToString(), TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
Label Desc = new Label { Text = test[0].Desc.ToString(), TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
Label Price = new Label { Text = test[0].Prix.ToString(), TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
MyLayout.Children.Add(PicProd);
MyLayout.Children.Add(Name);
MyLayout.Children.Add(Desc);
MyLayout.Children.Add(Price);
MyGrid.Children.Add(MyLayout, 0, 0);
MyGrid.Children.Add(MyLayout, 0, 1);
Content = MyGrid;
所以我有两个 stacklayout 元素,我想在两个列上(并排)显示,但我没有成功正确显示它们
最佳答案
您可以在元素上设置 Grid.Row
和 Grid.Column
以将它们定位在网格内。这些是基于 0 的索引器。因此,在您的情况下,您可以按如下方式设置 StackLayout:
<StackLayout x:Name="MyLayout" Grid.Row="0" Grid.Column="0">
接下来你可以输入:
<StackLayout x:Name="MyLayout" Grid.Row="0" Grid.Column="1">
更新:
您不能将同一个控件实例添加到一个页面两次,这就是为什么只有一个项目显示的原因。您应该实例化 StackLayout
的 2 个实际实例。从 XAML 中删除 StackLayout
并在代码隐藏中声明它。然后创建 2 个单独的标签实例并将它们添加到适当的 StackLayout
。它应该看起来像这样:
var test = new List<Product>
{
new Product() {Text1 = "DESC", Text2= "HelloWorld" },
new Product() {Text1 = "DESC2", Text2= "HelloWorld2" }
};
MyGrid.BackgroundColor = Color.Yellow;
var Name = new Label { Text = test[0].Text1.ToString(), TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
var Desc = new Label { Text = test[0].Text2.ToString(), TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
var MyLayout = new StackLayout();
MyLayout.BackgroundColor = Color.Red;
MyLayout.Children.Add(Name);
MyLayout.Children.Add(Desc);
MyGrid.Children.Add(MyLayout, 0, 0);
var Name2 = new Label { Text = test[0].Text1.ToString(), TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
var Desc2 = new Label { Text = test[0].Text2.ToString(), TextColor = Color.Black, HorizontalOptions = LayoutOptions.Center, VerticalOptions = LayoutOptions.Center };
var MyLayout2 = new StackLayout();
MyLayout2.BackgroundColor = Color.Blue;
MyLayout2.Children.Add(Name2);
MyLayout2.Children.Add(Desc2);
MyGrid.Children.Add(MyLayout2, 1, 0);
另一件事要记住,Children.Add
调用的参数希望列作为第一个参数,然后是行。此外,您可以使用此扩展方法来简化添加具有 span 等子项的过程。
public static class GridExtension
{
public static void AddChild(this Grid grid, View view, int row, int column, int rowspan = 1, int columnspan = 1)
{
if (row < 0) throw new ArgumentOutOfRangeException(nameof(row));
if (column < 0) throw new ArgumentOutOfRangeException(nameof(column));
if (rowspan <= 0) throw new ArgumentOutOfRangeException(nameof(rowspan));
if (columnspan <= 0) throw new ArgumentOutOfRangeException(nameof(columnspan));
if (view == null) throw new ArgumentNullException(nameof(view));
Grid.SetRow((BindableObject)view, row);
Grid.SetRowSpan((BindableObject)view, rowspan);
Grid.SetColumn((BindableObject)view, column);
Grid.SetColumnSpan((BindableObject)view, columnspan);
grid.Children.Add(view);
}
}
关于c# - Xamarin 网格和 StackLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44112916/
我有一个显示在 TextField 下的搜索建议组件。每当在 TextField 中输入文本时,搜索建议组件都会根据当前输入的文本显示可能的匹配项列表...我在 TextField 下有更多内容,只要
我正在使用 NativeScript StackLayout 组件来布局我的元素。 在 StackLayout 的子元素之间创建间隙的最佳方法是什么? 最佳答案 您可以在该布局的 css 中使用 ma
我正在使用 Xamarin 并使用 XAML 创建我的 View ,但我一生都无法让这个标签按照我想要的方式包装。如果标签到达屏幕边缘,我希望它像这样包裹...... 现在它看起来像这样......
我想使用仅使用 xaml 的 Xamarin 表单使用相对布局将 Stacklayout 定位在图像顶部的底部。 xaml 看起来像这样。
我想知道如何将堆栈布局放入 xamarin 表单的网格案例中并重复该模式。 我在我的 xaml 中声明了我的网格和堆栈布局。
早上好,我正在尝试实现单击 StackPanel 上的 UserName 时的功能,以便键盘不会隐藏信息。但这不是最好的选择,我在 iOS 和 Android 上工作。你能帮帮我吗。
我有一个 JSON 文件,它以 base64 格式返回任意数量的图像。在我的 component.html 中,我尝试将图像设置为 StackLayout 的背景,如下所示: -->
我正在使用以下(测试)代码动态创建页面内容。我希望 Entry 控件保持在 StackLayout 范围内并裁剪其较大的 Text 值。不知怎的,这不像我想要的那样工作。 我在这里做错了什么? pub
今天我尝试重写 Snapchat 的 UI 作为一项挑战。我从着陆页开始,但我在制作底部按钮时遇到了问题,它们下面有一个空隙。 我很惊讶它不会自然地 100% 到底部,但有什么办法可以做到这一点吗?我
我有一个 FlexLayout内部 StackLayout : 我如何居中 FlexLayout内S
我正在尝试显示一个包含一些项目的 ListView ,我只想在这些项目之间留出一点空间。 我用谷歌搜索了这个问题,但找不到对我有用的答案。这是我发现的解决方案,其结果与我想要的相同但不起作用:http
当我为 stacklayout 设置 StackOrientation.Horizontal 并设置 5 个标签时,它会正确显示。 但是,当标签数量增加时,标签文本大小会减小,并且所有标签都会根据
我正在开发一个向导,如果发生错误,该向导应该在控件顶部显示错误组合。该组合包含一个列出所有错误的 Text 和两个 Label:该组件的上方和下方。错误列表下方的Label可以省略。根据错误的数量,错
这是我的代码: ..... 有大量的标签,以至于它们从
当设备处于横向时,如何让 stacklayout 占用所有屏幕宽度? in Landscape mode stacklayout does not fill parent 这是我的 Xaml:
我有一个显示按钮的简单 Stacklayout。我希望能够让 child 从 stacklayout 中删除自己。 这个项目只是为了测试目的,所以每个按钮都链接到同一个事件处理程序。 private
我正在尝试实现一种可折叠的 StackLayout。每次用户单击按钮时,它都会展开或折叠堆栈布局以显示/隐藏更多详细信息。 我能够通过下面的代码实现更多/更少的效果,但它看起来不对而且效果也不是很好,
我正在尝试获得以下布局,我正在使用 StackLayout 框架 我无法堆叠 Box1、Box2 和 Box 3。 此外,当我将它们包装在 div 中时,每个框的标题给我带来了麻烦。 这是我目前的代码
我只是无法让它滚动.... 这是我的代码: sview=uix.scrollview.ScrollView(size_hint=[1,2],scroll_type=['bars','conte
我有这个 StackLayout,我曾用它在 XAML 中创建导航栏。这个 Horizontal StackLayout 包含一个按钮和标签。问题是文本没有完全居中,我似乎无法将它完美地放在中间。
我是一名优秀的程序员,十分优秀!