Нужно разместить навигационную рамку там, где она доступна во всем приложении - PullRequest
0 голосов
/ 26 октября 2010

У меня есть то, что составляет страницу меню в моем приложении Silverlight. В StackPanel есть несколько кнопок гиперссылки. Гиперссылки сопоставляются с другой страницей Uris в приложении с помощью навигационной рамки с UriMapper. Все это отображается в сетке 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" ... />

Опять же, как мне сделать эту рамку навигации доступной для всего приложения? Т.е. в одном месте?


Я принимаю ответ @Gabriel McAdams, но мне пришлось немного его изменить. Я использую шаблон для страницы навигации Silverlight, и в App.xaml есть словарь ресурсов, который, если мне мешают, если я добавлю сопоставление непосредственно в узел Application.Resources. Я обнаружил, что могу добавить отображение в 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 Ответ

1 голос
/ 26 октября 2010

Вы можете поместить его в Ресурсы приложения, например:

Это ваш файл app.xaml:

<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" ... />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...