UriMapper的问题

时间:2010-10-14 14:52:46

标签: c# silverlight silverlight-4.0

我在我的应用程序中启动并运行了导航,但我想隐藏真实的视图路径,所以我编写了这个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>

1 个答案:

答案 0 :(得分:2)

这概述了问题,试试this ......