簡體   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