2013-02-13 81 views
0

当我将作为资源对象的应用程序条附加到页面时,我无法显示应用程序栏。无法以编程方式加载应用程序条

下面的代码未能产生一个工作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; 

回答

1

将UI元素声明为资源通常是个坏主意。当你这样做时,你每次访问它并在不同地点使用它时都没有获得新实例。你会得到一个单一的实例,在这种情况下,整个应用程序。 UI元素不能拥有多个父母,但是如果您在两个地方使用该资源,或者甚至在同一控件的两个实例中使用了该资源,则违反了该要求。

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

相关问题