当我将appbar作为资源对象附加到页面时,我无法显示应用栏。
以下代码无法生成有效的应用栏:
的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;
答案 0 :(得分:1)
将UI元素声明为资源通常是一个坏主意。当您这样做时,每次访问它时都不会获得新实例并在不同位置使用它。在这种情况下,您将获得一个单个实例,用于整个应用程序。 UI元素不能有多个父元素,但是如果您在两个地方使用该资源,或者甚至是同一控件的两个实例,那么您就违反了它。
相反,您应该使用模板作为资源,这将生成相同UI的新副本,并在您使用模板的任何位置注入它们。在这种情况下,您可以将Content
标记内的所有内容放入DataTemplate
,然后获取该资源并将其分配给新的AppBar
实例的ContentTemplate
属性。这样,每次都会获得一个单独的实例,但是相同的子对象和布局。