繁体   English   中英

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

[英]How do I open page in different frame - WPF

我在WPF C#窗口中有2帧。 加载后,应用程序将页面加载到左侧框架中,而没有内容加载到右侧框架中。 在左侧框架中浏览2页后,我试图在右侧框架中加载另一页。 我能够执行此操作的唯一方法是关闭窗口并重新加载它。

当在同一WPF窗口的左框架中单击不同的页面时,如何在WPF窗口的右框架中加载新页面而不重新加载孔窗口?

谢谢

编辑:

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

持有“测试” 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");
        }
    }

和left1页面:

 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中创建一个方法,并在left1页面上单击该按钮,但它做的是相同的事情……显示了MessageBox,但不刷新MainWindow。

确定,如果您还没有弄清楚我是新来的! ...我很早以前就学习过Basic,Pascal和C。然后在10年前进行了一些Web开发,但是时间很长。 我想到了!! 我至今仅与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();
    }
}

希望这可以帮助其他人! 只花了我一天半的时间就解决了! 大声笑我第一次成功绑定。

因此,现在在此代码中,右框架已加载页面,但从视图中隐藏了,并显示了左框架页面。 单击左侧页面上的按钮后,右框架将变为隐藏状态!

为了通过ClickEvent事件在WPF中打开另一个页面,必须初始化导航服务。 让我们看一下我的wpf-app代码:在按钮的click事件上打开页面2,即按钮出现在页面1上:

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();


}
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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM