2010-10-14 277 views
0

我得到了導航起來,在我的應用程序運行,但我想躲便可欣賞到真正的路,所以我寫了這個UriMapper:麻煩與UriMapper

<Application 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
x:Class="MyApplication.App" 
    xmlns:navcore="clr-namespace:System.Windows.Navigation;assembly=System.Windows.Controls.Navigation"> 
<Application.Resources> 
    <!-- Resources scoped at the Application level should be defined here. --> 
     <navcore:UriMapper x:Key="uriMapper"> 
      <navcore:UriMapping Uri="{}{page}" MappedUri="/Views/{page}.xaml" /> 
     </navcore:UriMapper> 
</Application.Resources> 
</Application> 

這裏是我的導航按鈕單擊事件代碼:

private void NavigateButton_Click(object sender, RoutedEventArgs e) 
    { 
     Button btn = sender as Button; 
     string uri = btn.Tag.ToString(); 

     this.ContentFrame.Navigate(new Uri(uri, UriKind.RelativeOrAbsolute)); 
    } 

這裏是一個按鈕的XAML:

<Button Content="Home" Click="NavigateButton_Click" Tag="Home" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Height="30" /> 

然而,當我點擊一個按鈕,我總體性他的錯誤:

Content for the URI cannot be loaded. The URI may be invalid. 

在這一行:

this.ContentFrame.Navigate(new Uri(uri, UriKind.RelativeOrAbsolute)); 

我在做什麼錯?

編輯:

更多XAML文件... MainPage.xaml中:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
      mc:Ignorable="d" 
      x:Class="MyApplication.MainPage"> 

    <Grid x:Name="LayoutRoot"> 
     <Grid.Background> 
      <ImageBrush ImageSource="/bg.jpg" Stretch="Fill"/> 
     </Grid.Background> 
     <Rectangle Fill="#FF252525" Stroke="Black" Opacity="0.7" RadiusX="10" RadiusY="10" Margin="0,100,0,0" StrokeThickness="0" Width="600" HorizontalAlignment="Center" Height="350" VerticalAlignment="Top" d:LayoutOverrides="Height"/> 
     <Canvas x:Name="NavigationCanvas" Margin="0,50,0,0" HorizontalAlignment="Center" Width="600"> 
      <toolkit:ExpressionDarkTheme Height="30" Canvas.Left="188" Canvas.Top="11" Width="100" Foreground="White" Background="{x:Null}"> 
       <Button Content="Home" Click="NavigateButton_Click" Tag="Home" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Height="30" /> 
      </toolkit:ExpressionDarkTheme> 
         <!-- etc more buttons --> 
     </Canvas> 

     <navigation:Frame x:Name="ContentFrame" Margin="15,115,15,0" Height="320" VerticalAlignment="Top" Source="Home">    
     </navigation:Frame> 
    </Grid> 
</UserControl> 

Home.xaml:

<navigation:Page x:Class="MyApplication.Views.Home" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480" 
    Title="Home"> 

    <Grid x:Name="LayoutRoot" Width="570" Height="320" > 
     <TextBlock TextWrapping="Wrap" Foreground="White"> 
      Home. 
     </TextBlock> 
    </Grid> 

</navigation:Page> 

回答

2

這概括了問題,給this一試...

+0

這就是UriMapper應該處理的事情 - 查看第一個代碼片段,URI在那裏是顯式的。 – 2010-10-14 15:21:06

+0

你的家是在視圖文件夾? – 2010-10-14 15:23:34

+0

是的。這就是我寫這個導航的方式。 – 2010-10-14 15:25:08