我有两个Pivot的PivotItems控件。 XAML标记如下所示:
<Pivot x:Name="myPivot">
<PivotItem x:Name="pivot_item1" Header="header1">
<StackPanel x:Name="StackPanel1">
<TextBlock Text="page1"></TextBlock>
</StackPanel>
</PivotItem>
<PivotItem x:Name="pivot_item2" Header="header2">
<StackPanel x:Name="StackPanel2">
<Button x:Name="TestButton" Content="Test" Click="Button_Click"></Button>
</StackPanel>
</PivotItem>
</Pivot>
现在的问题是当我尝试访问后面代码中的各个元素时。例如,在OnNavigated
方法中,访问StackPanel1可以正常工作,但访问StackPanel2会返回null。:
StackPanel sp1 = StackPanel1; // OK
StackPanel sp2 = Stackpanel2; // null
通过x:Name访问第二个PivotItem中的任何元素返回null。我认为这可能是因为第二个透视项尚未初始化,所以我在第二个PivotItem中创建了一个Button,并试图通过其点击处理程序中的x:Name来访问它:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button b = TestButton; //null
Button b2 = (Button)sender; // OK
}
但是这仍然会返回null,但是按钮清楚地初始化了。任何人都可以向我解释这个并建议一个解决方法吗?谢谢!
答案 0 :(得分:1)
您的项目有问题,或者您在另一个容器中有Pivot。枢轴应该是顶级容器。如果它是另一个顶级样式容器的一部分,它不能很好地工作。您还可能需要检查它应该看起来像这样的构造函数
public MainPage()
{
this.InitializeComponent(); // check here as well to see if it declares every UI element correctly
this.NavigationCacheMode = NavigationCacheMode.Required;
}
调试的屏幕截图(如您所见,没有空值 - 这是使用您发布的代码)
我建议首先创建一个新的WP8.1运行时项目,看看是否可以重复你的错误。
答案 1 :(得分:0)
我认为您的第二个PivotItem尚未加载且控件不可用。将Loaded事件添加到数据透视表并尝试以下代码:
private void appPivot_LoadedPivotItem(object sender, PivotItemEventArgs e)
{
if ( e.Item.Name.CompareTo( "pivot_item1" ) == 0 )
{
StackPanel sp1 = StackPanel1;
}
else
{
StackPanel sp2 = StackPanel2;
}
}