![](/img/trans.png)
[英]Exception thrown when trying to remove pivot item (with header template) from code behind windows phone
[英]Accessing children of second pivot item from code behind with their x:Name returns null in Windows Phone 8.1
我有一个带有两个PivotItems的Pivot控件。 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。 谁能向我解释一下并提出解决方法? 谢谢!
您的项目有问题,或者您将Pivot放在另一个容器中。 枢轴应该是顶部容器。 如果它是另一个顶级样式容器的一部分,则无法正常工作。 您可能还想检查构造函数,它看起来应该像这样
public MainPage()
{
this.InitializeComponent(); // check here as well to see if it declares every UI element correctly
this.NavigationCacheMode = NavigationCacheMode.Required;
}
调试的屏幕截图(如您所见,没有null-这是使用您发布的代码)
我建议先创建一个新的WP8.1运行时项目,然后看看是否可以重复您的错误。
我认为您的第二个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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.