0

当我将 appbar 作为资源对象附加到页面时,我无法显示 appbar。

以下代码无法生成有效的应用栏:

应用程序.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 元素声明为资源通常是个坏主意。当您这样做时,您不会在每次访问它并在不同位置使用它时都获得一个新实例。您会得到一个实例,在这种情况下是整个应用程序。UI 元素不能有多个父元素,但如果您在两个地方甚至同一控件的两个实例中使用该资源,则您违反了这一点。

相反,您应该使用模板作为资源,这将生成相同 UI 的新副本,并将它们注入到您使用模板的任何位置。在这种情况下,您可以将Content标签内的所有内容放入 aDataTemplate中,然后获取该资源并将其分配给新AppBar实例的ContentTemplate属性。这样,您每次都会获得一个单独的实例,但子对象和布局相同。

于 2013-02-13T04:57:10.340 回答