WPF 导航并销毁当前 UserControl
WPF navigation and destroy current UserControl
我正在尝试在我的 WPF 应用程序中构建一个小型导航系统。我正在使用 this 教程在页面之间导航。我想在它上面为一个 UserControl
添加 'Go back' 功能。
我有一个 UserControl Orders
和另一个 UserControl Order
。 Orders
显示在主窗口中,当我单击一个按钮时,Order
UserControl
应该显示在主窗口中的同一位置。我试图在 Order
用户控件中引用 Orders
用户控件,并通过 Order
导航到 Orders
。但是 Order
并没有被破坏,因为我正在使用来自 class 的变量。
如何确保当我导航到 Order
表单 Orders
时,Orders
没有被破坏,以及当我从 [= 导航到 Orders
时14=], Order
被摧毁。
订单中的按钮单击事件处理程序Class:
private void ShowOrder(object sender, RoutedEventArgs e)
{
Order order = new Order();
Switcher.Switch(order);
}
Return 后退按钮单击处理程序顺序 Class
public UserControl parent;
private void ReturnBack(object sender, RoutedEventArgs e)
{
Switcher.Switch(parent);
}
我通常做下一个使用 ControlTemplate 的模式,假设您在 class:
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我们在view改变的时候改变view:
<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>
我正在尝试在我的 WPF 应用程序中构建一个小型导航系统。我正在使用 this 教程在页面之间导航。我想在它上面为一个 UserControl
添加 'Go back' 功能。
我有一个 UserControl Orders
和另一个 UserControl Order
。 Orders
显示在主窗口中,当我单击一个按钮时,Order
UserControl
应该显示在主窗口中的同一位置。我试图在 Order
用户控件中引用 Orders
用户控件,并通过 Order
导航到 Orders
。但是 Order
并没有被破坏,因为我正在使用来自 class 的变量。
如何确保当我导航到 Order
表单 Orders
时,Orders
没有被破坏,以及当我从 [= 导航到 Orders
时14=], Order
被摧毁。
订单中的按钮单击事件处理程序Class:
private void ShowOrder(object sender, RoutedEventArgs e)
{
Order order = new Order();
Switcher.Switch(order);
}
Return 后退按钮单击处理程序顺序 Class
public UserControl parent;
private void ReturnBack(object sender, RoutedEventArgs e)
{
Switcher.Switch(parent);
}
我通常做下一个使用 ControlTemplate 的模式,假设您在 class:
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我们在view改变的时候改变view:
<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>