2010-12-19 16 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を継承するクラスであり、すべて正常に動作します。今私はパノラマのアイテムをコードで並べ替えたい。

EDIT:私は(メインページに)私は、コードを使用するような「PAN1、PAN2、pan3、...」のような静的な文字列にしてOnNavigatedToHandler上のデフォルトの順序を作っ

これからXAMLからアイテムを削除この:

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); 
     } 

初めて(これはメインページにあります)すべてが正常です。パノラマが動作します。そこに私はアイテムの順序を変更することができます設定にナビゲートするメニューボタンがあります。設定ページのOnNavigateFromハンドラで、App.Order静的文字列を更新します。その後、メインページのOnNavigatedToが再び呼び出され、すべてが正常になります(例外はありません)が、パノラマ移動パノラマが表示され、レイアウトが壊れています。

ヘルプまたは解決策はありますか?

答えて

3

問題は、私たちと共有していないコードの一部にあるように見えます。
問題を示す最小限の完全な例を作成してみてください。

ご質問のコードにTestPanoramaItemHoroscopePanoramaItemの混乱があるようです。

標準のPanoramaItemを問題なくダイナミックに再配置できます。
次は、デフォルトパノラマのテンプレートに基づいています。

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

関連する問題