我有Pivot
我在Pivot.HeaderTemplate
设置标题,它基本上只显示了Names
的图书。在我的Pivot.ItemTemplate
中,我想显示一个Grid
,它是在我的.xaml.cs中构建的,但由于Grid
位于我的DataTemplate
中,我无法访问Grid x:Name
在.xaml.cs中的代码中已经存在了。 books
是一个包含Name
和Title
MainPage.xaml中
<Pivot ItemsSource="{x:Bind books}">
<Pivot.HeaderTemplate>
<DataTemplate x:DataType="local:Book">
<TextBlock Text="{x:Bind Name}"/>
</DataTemplate>
</Pivot.HeaderTemplate>
<Pivot.ItemTemplate>
<DataTemplate>
<Grid
x:Name="BooksGrid"
BorderBrush="Black" BorderThickness="1 1 0 0"
Margin="0 10 0 0>
</Grid>
</DataTemplate>
</Pivot.ItemTemplate>
现在我想访问BooksGrid
后面的代码并实际创建Grid
MainPage.xaml.cs中
public MainPage()
{
this.InitializeComponent();
}
private void DrawGrid()
{
//create columns of Grid
for (int i = 0; i < booksize.XProperties.Count + 1; i++)
{
BooksGrid.ColumnDefinitions.Add(new ColumnDefinition
{
});
}
BooksGrid.ColumnDefinitions[0].Width = GridLength.Auto;
}
....
已经在BooksGrid.ColumnDefinitions.Add(...)
处,我收到了无法找到BooksGrid
的错误。
如果我没有将DrawGrid
定义放在我的Grid
中,也放在DataTemplate
之外,我的Pivot
就有效。因此,当MainPage.xaml.cs
位于Grid
DataTemplate
找不到它
我已经读过,解决方案可能是我必须在Grid instance
加载后访问我想要使用的DataTemplate
。但我也不知道该怎么做。
编辑第一个解决方案:
我还在另一种方法中使用BooksGrid
MainPage.xaml.cs中
private void DrawBooksFront(Front front)
{
int row;
int column;
column = booksize.XProperties.IndexOf(front.CustomProps[booksize.XLabel])+1;
row = booksize.YProperties.IndexOf(front.CustomProps[booksize.YLabel])+1;
Frame newFrame = new Frame();
TaskBoardGrid.Children.Add(newFrame);
Grid.SetColumn(newFrame, column);
Grid.SetRow(newFrame, row);
}
答案 0 :(得分:4)
您无法访问BooksGrid
的原因是因为它会为books
集合中的每本书动态生成。因此,对于每本书,都会生成Grid
。
选项1:
您可以向网格添加Loaded
事件:
<Pivot x:Name="Pivot" ItemsSource="{x:Bind books}">
<Pivot.HeaderTemplate>
<DataTemplate x:DataType="local:Book">
<TextBlock Text="{x:Bind Name}"/>
</DataTemplate>
</Pivot.HeaderTemplate>
<Pivot.ItemTemplate>
<DataTemplate>
<Grid
BorderBrush="Black" BorderThickness="1,1,0,0"
Margin="0,10,0,0" Loaded="DrawGrid">
</Grid>
</DataTemplate>
</Pivot.ItemTemplate>
并在您的代码中:
private void DrawGrid(object sender, RoutedEventArgs e)
{
Grid grid = sender as Grid;
// Load your grid..
}
编辑 - 选项2: 如果您想以不同的方式从代码中访问您的网格(如编辑中建议的那样),您可以随时执行以下操作:
private void DrawBooksFront(Front front)
{
// Loop through the pivot's items and get the content from each item's ContentTemplate.
foreach (var item in Pivot.Items)
{
PivotItem pivotItem = Pivot.ContainerFromItem(item) as PivotItem;
Grid grid = pivotItem.ContentTemplate.LoadContent() as Grid;
// Do something with the grid.
}
}
答案 1 :(得分:1)