Xaml 无法以编程方式加载appbar
当我将appbar作为资源对象附加到页面时,无法获取要显示的appbar 以下代码无法生成工作appbar: app.xamlXaml 无法以编程方式加载appbar,xaml,microsoft-metro,winrt-xaml,Xaml,Microsoft Metro,Winrt Xaml,当我将appbar作为资源对象附加到页面时,无法获取要显示的appbar 以下代码无法生成工作appbar: app.xaml <AppBar x:Key="RegisterHome_TopAppBar" > <AppBar.Content> <Grid> <StackPanel Orientation="Horizontal" HorizontalAlignment="Ce
<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 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;
一般来说,将UI元素声明为资源是个坏主意。当您这样做时,您不会在每次访问它并在不同地点使用它时都得到一个新实例。在本例中,整个应用程序只有一个实例。UI元素不能有多个父元素,但如果您在同一控件的两个位置甚至两个实例中使用该资源,则违反了该规则 相反,您应该使用模板作为资源,这将生成同一UI的新副本,并在使用模板的任何地方注入它们。在这种情况下,您可以将
Content
标记中的所有内容放入DataTemplate
中,然后获取该资源并将其分配给新的AppBar
实例的ContentTemplate
属性。这样,您每次都会得到一个单独的实例,但子对象和布局是相同的
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;