如何使用c#在UWP中创建ItemsWrapGrid

本文关键字:创建 ItemsWrapGrid UWP 何使用 | 更新日期: 2023-09-27 18:09:19

问题:如何在c#中使用ItemsWrapGrid布局制作Grid ?

<

上下文/strong>

  • UWP
  • Visual Studio 2015
  • Windows 10
  • c#

我知道如何在XAML中制作它。在Visual Studio 2015中创建一个新的UWP应用程序后,XAML为:

<Page
    x:Class="WrapGridTest001.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WrapGridTest001"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    MinWidth="10"
    MinHeight="10"
    >
    <Grid x:Name="thisGrid">
        <GridView x:Name="thisGridView" IsItemClickEnabled="True">
            <GridView.ItemsPanel>
                <ItemsPanelTemplate>
                    <ItemsWrapGrid
                            x:Name="thisItemsWrapGrid"
                            Orientation="Horizontal"
                            MaximumRowsOrColumns="5"
                        />
                </ItemsPanelTemplate>
            </GridView.ItemsPanel>
            <TextBlock Text="#1"/>
            <TextBlock Text="#2"/>
            <TextBlock Text="#3"/>
        </GridView>
    </Grid>
</Page>

为了使它程序化,我从XAML:

中取出了它。
<Page
    x:Class="WrapGridTest001.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WrapGridTest001"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    MinWidth="10"
    MinHeight="10"
    >
</Page>

并尝试在Page的构造函数中复制它:

public MainPage()
{
    this.InitializeComponent();
    // Make the Grid and set it to be the Page's .Content:
    Grid grid = new Grid();
    this.Content = grid;
    // Make the GridView for the Grid, then set it:
    GridView gridView = new GridView();
    grid.Children.Add(gridView);
    // Make the ItemsPanelTemplate; necessary?
    ItemsPanelTemplate itemsPanelTemplate = new ItemsPanelTemplate();
    gridView.ItemsPanel = itemsPanelTemplate;
    // Make the ItemsWrapGrid.  Can't figure out how to set this.
    ItemsWrapGrid itemsWrapGrid = new ItemsWrapGrid();
    // When I traced the XAML version, its ItemsWrapGrid was apparently under
    //      gridView.ItemsPanelRoot
    // , but that's a get-only property.  I can't find a place to set it.
    // Add the TextBlock's with "#1", "#2", and "#3":
    for (int i = 1; i <= 3; ++i)
    {
        TextBlock textBlock = new TextBlock();
        textBlock.Text = "#" + i.ToString();
        gridView.Items.Add(textBlock);
    }
    // All done.  However, this Grid will show contents with a vertical alignment
    // rather than a horizontal one.
}

我需要添加哪些额外的代码来设置c#中的ItemsWrapGrid,因为它在XAML中设置?目前c#代码创建了ItemsWrapGrid,但ItemsWrapGrid实际上并没有设置在任何地方,因为到目前为止每次尝试使用它都会导致某种错误。

如何使用c#在UWP中创建ItemsWrapGrid

您需要的是XamlReader

string template =
                "<ItemsPanelTemplate xmlns='"http://schemas.microsoft.com/winfx/2006/xaml/presentation'" xmlns:x='"http://schemas.microsoft.com/winfx/2006/xaml'"><ItemsWrapGrid VerticalAlignment = '"Top'" "
                + " ItemWidth = '""
                + itemWidth
                + "'" Orientation = '"Horizontal'"/></ItemsPanelTemplate> ";
yourgridview.ItemsPanel = (ItemsPanelTemplate)XamlReader.Load(template);

事实是ItemsWrapGrid是GridView的默认面板。ItemsPanelTemplate不能通过属性拥有ItemsWrapGrid并使用XamlReader,这不是很好。在gridview加载后,它在ItemsPanelRoot中获得一个默认的ItemsWrapGrid。

yourgridview.Loaded += yourgridview_Loaded;

和函数

private void yourgridview_Loaded(object sender, RoutedEventArgs e)
{
    var a = sender as GridView;
    var b = a.ItemsPanelRoot;
    var c = b as ItemsWrapGrid;
    c.MaximumRowsOrColumns = 2;c.Orientation = Orientation.Horizontal;
}