0

アプリバーをリソース オブジェクトとしてページにアタッチすると、アプリバーを表示できません。

次のコードは、機能するアプリバーの生成に失敗します:

app.xaml

    <AppBar x:Key="RegisterHome_TopAppBar" >
        <AppBar.Content>
            <Grid>
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                    <Button x:Name="RegisterHome_MaterialsButton" />
                    <Button x:Name="RegisterHome_ServicesButton"  />
                </StackPanel>
            </Grid>
        </AppBar.Content>
    </AppBar>

コード ビハインド ファイル

        var view = flipView.SelectedItem as Register.Home;

        AppBar appbar = Application.Current.Resources["RegisterHome_TopAppBar"] as AppBar;

        view.TopAppBar = appbar;

注: このコードを使用すると、正常に動作します。

            var appbar = new AppBar();
            StackPanel sp = new StackPanel();
            sp.Orientation = Orientation.Horizontal;
            Button myButton = new Button();
            myButton.Content = "Click Me";
            sp.Children.Add(myButton);
            appbar.Content = sp;

            view.TopAppBar = appbar;
4

1 に答える 1

1

UI 要素をリソースとして宣言することは、一般的に悪い考えです。これを行うと、アクセスするたびに新しいインスタンスを取得して別の場所で使用するわけではありません。この場合、アプリケーション全体に対して 1 つのインスタンスを取得します。UI 要素は複数の親を持つことはできませんが、そのリソースを 2 つの場所で使用したり、同じコントロールの 2 つのインスタンスでさえ使用したりすると、違反になります。

代わりに、テンプレートをリソースとして使用する必要があります。これにより、同じ UI の新しいコピーが生成され、テンプレートを使用する場所にそれらが挿入されます。この場合、代わりにContentタグ内のすべてを に置き、そのリソースを取得して新しいインスタンスのプロパティに割り当てることができます。そうすれば、毎回個別のインスタンスを取得できますが、子オブジェクトとレイアウトは同じになります。DataTemplateAppBarContentTemplate

于 2013-02-13T04:57:10.340 に答える