2010-12-19 36 views
0

我通過代碼添加全景圖項目時遇到問題。通過代碼將項目添加到全景圖

這裏是test xaml的工作原理。

<controls:Panorama x:Name="pano"> 
    <controls:Panorama.Title>...</controls:Panorama.Title> 
    <controls:Panorama.Background>...</controls:Panorama.Background> 
    <local:TestPanoramaItem ...></local:HoroscopePanoramaItem> 
    <local:TestPanoramaItem ...></local:HoroscopePanoramaItem> 
    <local:TestPanoramaItem ...></local:HoroscopePanoramaItem> 
</controls:Panorama> 

TestPanoramaItem是繼承自PanoramaItem的類,在xaml中都可以正常工作。現在我想通過代碼重新排列全景物品。

編輯:我刪除從XAML項目從現在開始

我在靜態的字符串由默認的順序,如「PAN1,PAN2,PAN3,...」,並於OnNavigatedToHandler(中的MainPage)我用這樣的代碼這個:

protected override void OnNavigatedTo(NavigationEventArgs e) 
     { 
      String[] order = App.Order.Split(','); 
      App.items.Clear(); 
      foreach (String o in order) 
      { 
       switch (o) 
       { 
        case "pan1": App.items.Add(App.pan1); break; 
        case "pan2": App.items.Add(App.pan2); break; 
        case "pan3": App.items.Add(App.pan3); break; 
        ... 
       } 
      } 
      pano.Items.Clear(); 

      foreach (TestPanoramaItem ti in App.items) 
       pano.Items.Add(ti); 
      base.OnNavigatedTo(e); 
     } 

第一次調用(這是在MainPage中)一切都看起來不錯。全景工程。在那裏,我有菜單按鈕,導航到設置,我可以改變項目的順序。在設置頁面的OnNavigateFrom處理程序中,我更新App.Order靜態字符串。之後,主頁面的OnNavigatedTo被再次調用並且一切都很好(沒有例外),但是我無法移動全景圖並且全景圖項目佈局被打破。

任何幫助或解決方案?

回答

3

該問題看起來是您未與我們分享的部分代碼。
嘗試創建演示問題的儘可能最小的完整示例。

在你的問題的代碼中,TestPanoramaItemHoroscopePanoramaItem之間似乎也有一些混淆。

我可以動態地重新排列標準PanoramaItems而不會出現問題。
以下是基於默認模板全景:

Mainpage.xaml

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <controls:Panorama Name="myPano" Title="my application"> 
     <controls:Panorama.Background> 
      <ImageBrush ImageSource="PanoramaBackground.png"/> 
     </controls:Panorama.Background> 
    </controls:Panorama> 
</Grid> 

<!--Panorama-based applications should not show an ApplicationBar but this is just for testing--> 
<phone:PhoneApplicationPage.ApplicationBar> 
    <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> 
     <shell:ApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1" Click="ApplicationBarIconButton_Click"/> 
    </shell:ApplicationBar> 
</phone:PhoneApplicationPage.ApplicationBar> 

MainPage.xaml.cs

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     myPano.Items.Clear(); 

     if (new Random().Next(1, 2) == 1) 
     { 
      myPano.Items.Add(App.pan1); 
      myPano.Items.Add(App.pan2); 
      myPano.Items.Add(App.pan3); 
     } 
     else 
     { 
      myPano.Items.Add(App.pan1); 
      myPano.Items.Add(App.pan3); 
      myPano.Items.Add(App.pan2); 
     } 

     base.OnNavigatedTo(e); 
    } 

    private void ApplicationBarIconButton_Click(object sender, EventArgs e) 
    { 
     NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative)); 
    } 

App.xaml.cs

public static PanoramaItem pan1 
{ 
    get { return new PanoramaItem { Header = "first item" }; } 
} 
public static PanoramaItem pan2 
{ 
    get { return new PanoramaItem { Header = "second item" }; } 
} 
public static PanoramaItem pan3 
{ 
    get { return new PanoramaItem { Header = "third item" }; } 
} 
+0

感謝您的答覆。在發佈時我將HoroscopePanoramaItem更改爲TestPanoramaItem,但我忽略了結束標記。我通過不繼承PanoramaItem並製作將保留原始PanoramaItem的自定義控件,解決了您的發佈和電子郵件通知之間的問題。所以當重新排序時,我只是把不同的內容放到現有的全景圖上。抱歉忘記刪除問題。 – zveljkovic 2010-12-21 04:24:08