【问题标题】:How do I open page in different frame - WPF如何在不同的框架中打开页面 - WPF
【发布时间】:2014-08-23 22:26:50
【问题描述】:

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

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

谢谢

编辑:

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

持有“测试”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 中创建一个方法并在 left1 页面按钮单击上调用它,但它做同样的事情......显示 MessageBox 但不刷新 MainWindow。

【问题讨论】:

标签: wpf frames


【解决方案1】:

好吧,如果你还没有弄清楚我是新人! ...我多年前学习了 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();
    }
}

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

所以现在在这段代码中,右侧框架加载了一个页面,但从视图中隐藏,而左侧框架页面显示。当单击左侧页面上的按钮时,右侧框架变为未隐藏!

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多