How to navigate to other page with button in WPF

2019-03-19 05:20发布

I have a second .xaml page set up under the name Page2.xaml and I want to make it so that when my button is clicked, the user is taken to Page2.xaml

I have this for my button inside of my Page1.xaml:

<Grid>
    <Button x:Name="localModeBtn" 
            Style="{StaticResource MainButtonStyle}"  
            Content="local mode" 
            Click="localModeBtn_Click" />
</Grid>

And for the button event handler:

private void localModeBtn_Click(object sender, RoutedEventArgs e)
    {
        Uri uri = new Uri("Page2.xaml", UriKind.Relative);
        this.NavigationService.Navigate(uri);
    }

Upon clicking the button I receive an error that says "Cannot locate resource page2.xaml" The thing is that Page2.xaml is in the same folder as Pag1.xaml so I can't see where I've gone wrong?

标签: c# wpf xaml button
6条回答
仙女界的扛把子
2楼-- · 2019-03-19 06:06

Solution to my own question:

I feel a bit silly providing a solution to my own question but thanks to Jasti's link I was able to sort my code out. As he had only posted a comment, I can't mark it as an answer, so here is the solution.

I changed the NavigationWindow on to a Window and inserted:

<DockPanel>
    <Frame x:Name="_NavigationFrame" NavigationUIVisibility="Hidden" />
</DockPanel>

And within the constructor of the MainWindow.xaml.cs I added:

_NavigationFrame.Navigate(new Page1());

Then the last step was to adjust the button event handler to:

this.NavigationService.Navigate(new Uri("Pages/Page2.xaml", UriKind.Relative));
查看更多
ら.Afraid
3楼-- · 2019-03-19 06:07

You don't need any C# code for this, just do it in XML:

<Button Content="local mode"
    Command="NavigationCommands.GoToPage"
    CommandParameter="/Page2.xaml"/>

(Reformatted code not tested)

查看更多
神经病院院长
4楼-- · 2019-03-19 06:09

You should use this, this worked for me:

var Page2= new Page2(); //create your new form.
Page2.Show(); //show the new form.
this.Close(); //only if you want to close the current form.

There is a variable type of a page with the page.xaml right name in your solution. after that, you should use its methods to do it functionally.

查看更多
干净又极端
5楼-- · 2019-03-19 06:10

Use any container and bind the content to any property in your viewmodel or codebehind. After that you just have to update the property by setting a new page and call the PropertyChanged-event (see INotifyPropertyChanged interface). This will update the content of your container and you can display anything you want.

查看更多
叛逆
6楼-- · 2019-03-19 06:18
private void Navigate_Click(object sender, RoutedEventArgs e)//By Prince Jain 
{
    this.NavigationService.Navigate(new Uri("Page3.xaml", UriKind.Relative));
}
查看更多
相关推荐>>
7楼-- · 2019-03-19 06:25

In case you want a separate window

NavigationWindow navWIN = new NavigationWindow();
navWIN.Content = new pageWFbchAdmin();
navWIN.Show(); 
//winBchAdmin.ShowDialog();
查看更多
登录 后发表回答