繁体   English   中英

使用x:Name从后面的代码访问第二个枢纽项目的子级在Windows Phone 8.1中返回null

[英]Accessing children of second pivot item from code behind with their x:Name returns null in Windows Phone 8.1

我有一个带有两个PivotItemsPivot控件。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM