![](/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.