如何在不同的框架中打开页面 - WPF

时间:2014-07-02 23:45:45

标签: wpf frames

我在WPF C#窗口中有2个帧。加载后,应用程序将页面加载到左框架中,而不将任何内容加载到右框架中。在左框架中浏览2页后,我试图在右框架中加载不同的页面。我能够做到这一点的唯一方法是关闭窗口并重新加载它。

如果在同一个WPF窗口左侧框架中的另一个页面上单击按钮而不重新加载孔窗口,如何在WPF窗口的右侧框架中加载新页面?

谢谢

修改

为了澄清一点,我有一个2帧的窗口。我想通过单击左框中页面上的按钮来打开右框中的页面。这就是我所拥有的:

变量类持有“test”int:

    public static class variables
    {
        public static int test;
    }

主窗口:

    public MainWindow()
    {
        InitializeComponent();
        int mytest = variables.test;
        left1 left1 = new left1();
        left.NavigationService.Navigate(left1);
        Right1 right1 = new Right1();
        if (mytest == 1)
        {
            right.NavigationService.Navigate(right1);
            MessageBox.Show("1");
        }
    }

左侧1页:

 public left1()
    {
        InitializeComponent();

    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        int test = 1;
        variables.test = test;
        MainWindow mw = new MainWindow();
        mw.Show();
    }

这可行但是它打开了另一个调用mw.Show()的窗口;有没有办法在不打开另一个窗口的情况下工作(比如刷新窗口)?我试过mw.InitializeComponent();这将显示MessageBox但不会重新呈现MainWindow。我试图在MainWindow中创建一个方法,并在左侧1页按钮上调用它,但是它做同样的事情...显示MessageBox但不刷新MainWindow。

3 个答案:

答案 0 :(得分:0)

好的,如果你还没弄明白我是新的! ...我多年前学过Basic,Pascal和C.然后在10年前开发了一些网络,但它已经很长时间了。我想到了!!我现在只使用C#WPF大约2周了。

我将右框架的Visibility属性绑定到MainWindow类下的一个方法,该方法在单击按钮时调用并使用INotifyPropertyChanged事件。这就是我现在所拥有的:

MainWindow.xmal.cs:

    public class Refresh : INotifyPropertyChanged
{
    private string vis1;
    public string Vis1
    {
        get { return vis1; }
        set
        {
            if (vis1 != value)
            {
                vis1 = value;
                OnPropertyChanged("Vis1");
            }
        }
    }
    protected void OnPropertyChanged(string propertyname)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

public partial class MainWindow : Window
{
    private static Refresh Visi;
    public MainWindow()
    {
        InitializeComponent();
        Left1 l1 = new Left1();
        Right1 r1 = new Right1();
        left.NavigationService.Navigate(l1);
        right.NavigationService.Navigate(r1);
        Visi = new Refresh { Vis1 = "Hidden" };
        DataContext = Visi;
    } 
    public static void showRight()
    {
        Visi.Vis1 = "Visible";
    }
}

XAML:

<Frame x:Name="right" Content="Frame" HorizontalAlignment="Left" Height="224" Margin="262,10,0,0" VerticalAlignment="Top" Width="225" Visibility="{Binding Vis1}" />

左侧页面上只是一个简单的按钮点击事件!:

    public partial class Left1 : Page
{
    public Left1()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MainWindow.showRight();
    }
}

希望这有助于其他人!只花了我一天半的时间搞清楚了!大声笑我的第一次成功绑定。

现在,在此代码中,右框架已加载页面但隐藏在视图中,并显示左框架页面。当在左页面上单击按钮时,右框架将被取消隐藏!

答案 1 :(得分:0)

要通过ClickEvent事件在WPF中打开其他页面,必须初始化导航服务。让我们看一下我的wpf-app代码:我在第1页上显示按钮的点击事件打开第2页:

private void Button_Click(object sender, RoutedEventArgs e)
{

    NavigationWindow _navigationWindow = new NavigationWindow();

    _navigationWindow.Height = this.Height;

    _navigationWindow.Width = this.Width;

    _navigationWindow.Show();

    _navigationWindow.Navigate(new Page2());

    this.Close();


}

答案 2 :(得分:0)

public void Login_Click(object sender, RoutedEventArgs e)
{

    NavigationWindow _navigationWindow = new NavigationWindow();

    _navigationWindow.Height = this.Height;

    _navigationWindow.Width = this.Width;

    _navigationWindow.Show();

    _navigationWindow.Navigate(new Page1());


    this.Close();
}