wpf xaml页面导航没有代码

时间:2015-12-12 23:45:34

标签: wpf xaml mvvm prototype

我正在设计原型并希望在wpf应用程序中的页面之间导航。 目前我通过处理事件f.e。

来使用代码
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    Page2 page = new Page2();

    this.NavigationService.Navigate(page);
}

这样可行,但如果您考虑稍后使用MVVM,则会感到不愉快。

考虑使用按钮点击事件,有没有办法在xaml中直接执行此操作?

2 个答案:

答案 0 :(得分:1)

  1. 下面的代码会在点击按钮时显示框架中的Page1和Page2。

  2. 它还会在Frame中启动时显示Page2。

  3. 在下面的框架源中更改命名空间名称。

    <Frame x:Name="frame" Content="Frame" Margin="80,80,144,122" Source="/WpfNavigation;component/Page2.xaml"/>
    <Button x:Name="button" Content="Page1" HorizontalAlignment="Left" Margin="80,40,0,0" VerticalAlignment="Top" Width="75" Background="#FFF9F9F9">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <ei:ChangePropertyAction PropertyName="Source" TargetObject="{Binding ElementName=frame}">
                    <ei:ChangePropertyAction.Value>
                        <System:Uri>Page1.xaml</System:Uri>
                    </ei:ChangePropertyAction.Value>
                </ei:ChangePropertyAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>
    <Button x:Name="button1" Content="Page2" HorizontalAlignment="Left" Margin="192,40,0,0" VerticalAlignment="Top" Width="75">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <ei:ChangePropertyAction TargetObject="{Binding ElementName=frame}" PropertyName="Source">
                    <ei:ChangePropertyAction.Value>
                        <System:Uri>Page2.xaml</System:Uri>
                    </ei:ChangePropertyAction.Value>
                </ei:ChangePropertyAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>
    
  4. 使用Blend程序集:

    添加对System.Windows.InteractivityMicrosoft.Expression.Interactions以及以下命名空间的引用:

    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    

    如果我们想要使用页面本身中存在的Button进行导航,那么我们可以使用Source NavigationService类对象的Page属性进行导航。

    Page1.xaml:

    <Button Content="Go to page2">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="Click">
                <ei:ChangePropertyAction PropertyName="Source" TargetObject="{Binding NavigationService, RelativeSource={RelativeSource AncestorType={x:Type Page}, Mode=FindAncestor}}">
                    <ei:ChangePropertyAction.Value>
                        <System:Uri>Page2.xaml</System:Uri>
                    </ei:ChangePropertyAction.Value>
                </ei:ChangePropertyAction>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </Button>
    

答案 1 :(得分:-1)

如果您使用的是按钮,则可以使用命令绑定。您的视图模型将具有一个属性ICommand,可以为您导航

<Button Command="{Binding Navigate}"/>