Question: How can I make a Grid
with a ItemsWrapGrid
layout in C#?
Context
- UWP
- Visual Studio 2015
- Windows 10
- C#
Background
I know how to make it in XAML. After creating a new UWP application in Visual Studio 2015, the XAML is:
<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>
To make it programmatically, I've taken it out of the 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>
and tried to reproduce it in the Page
's constructor:
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.
}
What additional code do I need to add to set the ItemsWrapGrid
in C# as it was set in the XAML? Currently the C# code creates the ItemsWrapGrid
, but the ItemsWrapGrid
isn't actually set anywhere since every attempt to use it so far has resulted in a bug of some sort.