代码之家  ›  专栏  ›  技术社区  ›  Cyberherbalist

希望将导航框架放置在整个应用程序中可用的位置

  •  0
  • Cyberherbalist  · 技术社区  · 14 年前

    我的Silverlight应用程序中有相当于菜单页的内容。它在StackPanel中有一些超链接按钮。使用带有UriMapper的导航框架将超链接映射到应用程序中的其他页面uri。所有这些都显示在菜单页的LayoutRoot网格中。我希望整个应用程序都可以使用UriMapping,这意味着它应该在App.xaml中,但是我不知道如何将它放在那里,所以它可以工作。有什么想法吗?下面是一些与我得到的代码类似的代码:

    <Grid x:Name="LayoutRoot">
        <Border x:Name="ContentBorder" Style="{StaticResource ContentBorderStyle}">
            <navigation:Frame x:Name="ContentFrame" Style="{StaticResource ContentFrameStyle}" Source="" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed">
                 <navigation:Frame.UriMapper>
                     <uriMapper:UriMapper>
                         <uriMapper:UriMapping Uri="/AgencyTechnical" MappedUri="/Views/AgencyTechnical.xaml"/>
                         <uriMapper:UriMapping Uri="/AgencyBusiness" MappedUri="/Views/AgencyBusiness.xaml"/>
                ...
                     </uriMapper:UriMapper>
                 </navigation:Frame.UriMapper>
             </navigation:Frame>
         </Border>
    
         <ScrollViewer x:Name="PageScrollViewer" Style="{StaticResource PageScrollViewerStyle}" Margin="10,10,0,0" Width="640">
             <StackPanel Name="stackPanel1" Width="490" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Height="326">
                 <TextBlock Text="Agency Screens" Name="AgencyScreenLabel" Style="{StaticResource MenuLabelStyle}" />
                    <HyperlinkButton Name="AgencyTechInfoLink" Style="{StaticResource LinksMenuStyle}"
                        Content="Agency Technical Information" ... />
                    <HyperlinkButton Name="AgencyTechInfoLink" Style="{StaticResource LinksMenuStyle}"
                        Content="Agency Technical Information" ... />
    


    我接受了加布里埃尔·麦克亚当斯的回答,但我得稍微修改一下。我正在使用Silverlight导航页的模板,App.xaml中有一个资源字典,如果直接将映射添加到Application.Resource s节点中,就会干扰它。我发现我可以将映射添加到Styles.xaml中,它工作得很好。我得到一个“类型'ResourceDictionary'在ResourceDictionary中,没有密钥。”如果执行以下操作,则会出错:

    <Application.Resources>
    
       <... Uri mapping here />
    
       <ResourceDictionary>
          <ResourceDictionary.MergedDictionaries>
             <ResourceDictionary Source="Assets/Styles.xaml"/>
          </ResourceDictionary.MergedDictionaries>
       </ResourceDictionary>
    
    </Application.Resources>
    

    但是将它添加到Assets/Styles.xaml中效果很好。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Gabriel McAdams    14 年前

    您可以将其放入应用程序资源中,如下所示:

    <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        x:Class="YourSilverlightApplication.App"
        xmlns:nav="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"
    >
        <Application.Resources>
            <nav:UriMapper x:Key="uriMapper">
                <nav:UriMapping Uri="/AgencyTechnical" MappedUri="/Views/AgencyTechnical.xaml"/>
                <nav:UriMapping Uri="/AgencyBusiness" MappedUri="/Views/AgencyBusiness.xaml"/>
            </nav:UriMapper>
        </Application.Resources>
    </Application>
    

    这是您的页面(已修改):

    <Grid x:Name="LayoutRoot">
        <Border x:Name="ContentBorder" Style="{StaticResource ContentBorderStyle}">
            <navigation:Frame x:Name="ContentFrame" Style="{StaticResource ContentFrameStyle}" Source="" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed" navigation:Frame.UriMapper="{StaticResource uriMapper}">
            </navigation:Frame>
         </Border>
    
         <ScrollViewer x:Name="PageScrollViewer" Style="{StaticResource PageScrollViewerStyle}" Margin="10,10,0,0" Width="640">
             <StackPanel Name="stackPanel1" Width="490" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Height="326">
                 <TextBlock Text="Agency Screens" Name="AgencyScreenLabel" Style="{StaticResource MenuLabelStyle}" />
                    <HyperlinkButton Name="AgencyTechInfoLink" Style="{StaticResource LinksMenuStyle}"
                        Content="Agency Technical Information" ... />
                    <HyperlinkButton Name="AgencyTechInfoLink" Style="{StaticResource LinksMenuStyle}"
                        Content="Agency Technical Information" ... />