我的MainWindow的网格内有一个框架。
我想在框架内加载Page1。现在,我在此Page1上有一个按钮。此按钮应关闭第1页并将第2页加载到框架中。第二页也有一个按钮。使用Page2上的按钮,我要加载Page1。等等。如果将两个按钮放在主窗口中,则可以加载两个页面,但是我需要在每个页面上分别放置按钮。
from .views import (
BlogListView,
BlogDetailView,
BlogCreateView,
BlogUpdateView,
BlogDeleteView,
)
urlpatterns = [
path('post/<int:pk>/delete/',
BlogDeleteView.as_view(), name='post_delete'),
path('post/<int:pk>/edit',
BlogUpdateView.as_view(), name='post_edit'),
path('post/new/', BlogCreateView.as_view(), name='post_new'),
path('post/<int:pk>/', BlogDetailView.as_view(), name='post_detail'),
path('', BlogListView.as_view(), name='home'),
]
答案 0 :(得分:1)
您可以使用以下事实:单击按钮是路由事件,以便在父框架中对其进行处理。
<Frame Name="ParentFrame"
Button.Click="ParentFrame_Click"
>
</Frame>
代码
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ParentFrame.Navigate(new Page1());
}
private void ParentFrame_Click(object sender, RoutedEventArgs e)
{
Button btn = e.OriginalSource as Button;
if(btn == null || btn.Tag == null)
{
return;
}
Page page = (Page)Activator.CreateInstance((Type)btn.Tag);
ParentFrame.Navigate(page);
}
}
Page1中的按钮:
<Button Width="100" Height="30"
Content="Go Page 2"
Tag="{x:Type local:Page2}"
/>
第2页:
<Button Width="100" Height="30"
Content="Go Page 1"
Tag="{x:Type local:Page1}"
/>
但是。在我工作过的所有团队中,这都被认为不适合用于商业应用程序。通常,将MVVM和viewmodel优先导航与contentcontrols所提供的用户控件一起使用。
答案 1 :(得分:0)
您可以将代码放在MainWindow.cs上的页面交换中,然后需要在两个页面上都定义事件,例如; PageSwapRequested。每次创建页面时,您都会注册该事件,单击按钮将触发该事件。
这样的事情,
namespace PageTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var page1 = new Page1();
page1.PageSwapRequested += Page1_PageSwapRequested;
FrameContent.Content = page1;
}
private void Page1_PageSwapRequested(object sender, EventArgs e)
{
//TODO: swap pages and don't forget to remove Page1_PageSwapRequested event handler.
//page1.PageSwapRequested -= Page1_PageSwapRequested;
}
}
}
namespace PageTest
{
public partial class Page1 : Page
{
public event EventHandler PageSwapRequested;
private void OnPageSwapRequested()
{
this.PageSwapRequested?.Invoke(this, EventArgs.Empty);
}
public Page1()
{
InitializeComponent();
}
private void BtnLoadPage2_Click(object sender, RoutedEventArgs e)
{
OnPageSwapRequested();
}
}
}
namespace PageTest
{
public partial class Page2 : Page
{
public event EventHandler PageSwapRequested;
private void OnPageSwapRequested()
{
this.PageSwapRequested?.Invoke(this, EventArgs.Empty);
}
public Page2()
{
InitializeComponent();
}
private void BtnLoadPage1_Click(object sender, RoutedEventArgs e)
{
this.OnPageSwapRequested();
}
}
}