如何使用 C# 在 UWP 中制作 ItemsWrapGrid?
How to make a ItemsWrapGrid in UWP using C#?
问题:如何在 C# 中使用 ItemsWrapGrid
布局制作 Grid
?
上下文
- 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
实际上并没有在任何地方设置,因为到目前为止每次尝试使用它都会导致某种错误。
你需要的是 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;
}
问题:如何在 C# 中使用 ItemsWrapGrid
布局制作 Grid
?
上下文
- 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
实际上并没有在任何地方设置,因为到目前为止每次尝试使用它都会导致某种错误。
你需要的是 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;
}