关于WPF的主窗口和page调用问题

番茄不剃头 2019-06-12 08:58:56
点击按钮1之后,跳到一个page上,我想通过在page上添加一个button,点击之后回到mainwindow,可是回去之后再点击按钮1就没有任何反应了。我要怎么做才可以再次点击按钮1,还能调出page???刚学c#一会,恳请前辈们不吝赐教!
这是xaml的代码
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Name="mw" x:Class="CnGTest1.MainWindow"
Title="test" Height="500" Width="800" WindowStartupLocation="CenterScreen">
<Grid x:Name="gr1" Background="#FFF6F6F6">
<Button x:Name="btn_flfj" Content="1" FontSize="30" HorizontalAlignment="Left" Margin="39,293,0,0" VerticalAlignment="Top" Width="160" Height="80" FontWeight="Bold" Click="btn1_Click"/>
<Button x:Name="btn_ccgl" Content="2" FontSize="30" Click="btn_ccgl_Click" HorizontalAlignment="Left" Margin="321,293,0,0" VerticalAlignment="Top" Width="160" Height="80" FontWeight="Bold"/>
<Button x:Name="btn_xxcx" Content="3" FontSize="30" Click="btn_xxcx_Click" HorizontalAlignment="Left" Margin="593,293,0,0" VerticalAlignment="Top" Width="160" Height="80" FontWeight="Bold"/>
<ContentControl x:Name="DetailPage" d:IsHidden="True"/>
<Frame x:Name="frmMain" d:IsHidden="True" />

</Grid>
</Window>


这是mainwindow的代码
namespace CnGTest1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void btn1_Click(object sender, RoutedEventArgs e)
{
//Page p1 = new Page1();
//DetailPage.Content = new Frame()
//{
// Content = p1
//};


Page1 p1 = new Page1();
if (p1.Visibility == System .Windows.Visibility.Collapsed)
{
p1.Visibility = System.Windows.Visibility.Visible;
this.frmMain.Content = new Frame()
{
Content = p1
};
}
else
{
this.frmMain.Navigate(new Uri("BasicFunc/ClassifyandGrading.xaml", UriKind.Relative));
}
}


private void btn_ccgl_Click(object sender, RoutedEventArgs e)
{
this.frmMain.Navigate(new Uri("BasicFunc/InventoryManage.xaml", UriKind.Relative));
}

private void btn_xxcx_Click(object sender, RoutedEventArgs e)
{
this.frmMain.Navigate(new Uri("BasicFunc/InfoSearch.xaml", UriKind.Relative));
}


}
}


这是page的代码
namespace CnGTest1
{
/// <summary>
/// Page1.xaml 的交互逻辑
/// </summary>
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}

private void btn2_Click(object sender, RoutedEventArgs e)
{
this.Visibility = System.Windows.Visibility.Collapsed;
}

}
...全文
690 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
每次都会创建一个p1,必须保证只有一个p1,声明在事件外部,你的this.Visibility = System.Windows.Visibility.Collapsed; 才会有效。 再次打开切换Visibility的值即可。
qq14923349 2019-06-13
  • 打赏
  • 举报
回复
goback() gofaword()
这几个方法忘了
OrdinaryCoder 2019-06-13
  • 打赏
  • 举报
回复
看你的意思是想隐藏page1 之后再显示同一个page 但是 Page1 p1 = new Page1();这块是new了一个新的
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在WPF中,Window和Page是构建用户界面的核心元素。Window是应用程序的容器,具备标题栏、边框和可调整大小等功能,通常包含多种控件,如ContentControl和Canvas。而Page要用于实现页面式导航,类似于Web开发中的HTML页面,通常嵌入到Frame或NavigationWindow中使用,自身没有独立的标题和边框。 要实现Window和Page之间的交互,可以借助Frame控件。Frame能够加载Page资源,并提供导航历史记录,支持用户前进和后退操作。从Window调用Page时,可以通过将Page实例设置为Frame的Content属性来实现。例如,代码如下: 从Page调用Window时,由于Page不直接继承自Window,无法直接创建或显示新窗口。但可以通过事件、依赖属性或通信机制(如MVVM模式下的Messenger或事件总线)实现Page向Window的回调。例如,Page可以触发事件,由Window监听并处理,从而打开新窗口。 在现代WPF开发中,MVVM模式被广泛应用。通过MVVM,Page和Window可以共享同一个ViewModel,实现数据绑定和命令执行。例如,Page上的按钮可以绑定到ViewModel中的命令,点击按钮时,ViewModel中的命令处理函数会执行逻辑,如打开新窗口或导航到其他Page。 一个典型的WPF导航Demo的代码结构如下: MainWindow.xaml:窗口,包含一个Frame用于导航。 MainWindow.xaml.cs:窗口的后台代码,处理窗口级别的逻辑。 NavigationFrame.xaml:自定义的Frame控件,可包含额外的导航逻辑。 NavigationFrame.xaml.cs

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧