コードを介してパノラマにアイテムを追加します
-
11-10-2019 - |
質問
コードを介してパノラマアイテムを追加するのに問題があります。
これが機能するテスト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、...」などの静的文字列でデフォルトの注文を行いました。
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 static stringを更新します。その後、メインページが再び呼び出され、すべてが正常になります(例外なし)が、パノラマを移動することはできず、パノラマアイテムのレイアウトは壊れています。
ヘルプや解決策はありますか?
解決
問題は、あなたが私たちと共有していないコードの一部であるように見えます。
問題を示す可能性のある最小の完全な例を作成してみてください。
また、間に混乱があるようです TestPanoramaItem
と HoroscopePanoramaItem
あなたの質問のコードで。
問題なく標準のパノラマイテムを動的に再配置できます。
以下は、デフォルトのパノラマテンプレートに基づいています。
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" }; }
}
所属していません StackOverflow