[英]WPF navigation and destroy current UserControl
我正在尝试在我的 WPF 应用程序中构建一个小型导航系统。 我正在使用本教程在页面之间导航。 我想为一个UserControl
在它上面添加“返回”功能。
我有一个 UserControl Orders
和另一个 UserControl Order
。 Orders
显示在 MainWindow 中,当我单击按钮时, Order
UserControl
应显示在 MainWindow 的同一位置。 我试图在Order
用户控件中放置对Orders
用户控件的引用,并通过Order
导航到Orders
。 但是Order
并没有被破坏,因为我使用的是那个类的变量。
我如何确保当我导航到Order
表单Orders
, Orders
不会被销毁,而当我从Order
导航到Orders
时, Order
被销毁。
Orders 类中的按钮单击事件处理程序:
private void ShowOrder(object sender, RoutedEventArgs e)
{
Order order = new Order();
Switcher.Switch(order);
}
订单类中的返回按钮单击处理程序
public UserControl parent;
private void ReturnBack(object sender, RoutedEventArgs e)
{
Switcher.Switch(parent);
}
我通常会使用下一个使用 ControlTemplate 的模式,假设您在课堂上有:
private Enums.View _currView;
public Enums.View CurrView
{
get
{
return _currView;
}
set
{
_currView = value;
OnPropertyChanged("CurrView");
}
}
当 Enums.View 是:
public enum View
{
ViewA = 1,
ViewB = 2,
ViewC = 3,
}
然后,使用上面的 Binding to CurrView 我们在视图改变时改变它:
<UserControl ...
xmlns:Views="clr-namespace:CustomersManager.View"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<!--*********** Control templates ***********-->
<ControlTemplate x:Key="DefultTemplate">
<Views:DefultCustomersView/>
</ControlTemplate>
<ControlTemplate x:Key="A">
<Views:ViewAllCustomersView />
</ControlTemplate>
<ControlTemplate x:Key="B">
<Views:AddNewCustomersView />
</ControlTemplate>
<ControlTemplate x:Key="C">
<Views:EditCustomersView />
</ControlTemplate>
</UserControl.Resources>
<Border BorderBrush="Gray" BorderThickness="2">
<Grid>
<ContentControl DataContext="{Binding}" >
<ContentControl.Style>
<Style TargetType="ContentControl">
<Setter Property="Template" Value="{StaticResource DefultTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=CurrView}" Value="ViewA">
<Setter Property="Template" Value="{StaticResource A}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=CurrView}" Value="ViewB">
<Setter Property="Template" Value="{StaticResource B}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=CurrView}" Value="ViewC">
<Setter Property="Template" Value="{StaticResource C}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl >
</Grid>
</Border>
</UserControl>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.