WPF 导航和销毁当前 UserControl
Posted
技术标签:
【中文标题】WPF 导航和销毁当前 UserControl【英文标题】:WPF navigation and destroy current UserControl 【发布时间】:2016-08-04 11:50:03 【问题描述】:我正在尝试在我的 WPF 应用程序中构建一个小型导航系统。我正在使用this 教程在页面之间导航。我想为一个UserControl
添加“返回”功能。
我有一个 UserControl Orders
和另一个 UserControl Order
。 Orders
显示在 MainWindow 中,当我单击按钮时,Order
UserControl
应该显示在 MainWindow 的同一位置。我尝试在Order
用户控件中引用Orders
用户控件,并通过Order
导航到Orders
。但是Order
没有被破坏,因为我使用的是该类中的变量。
我如何确保当我从Orders
导航到Order
时,Orders
没有被破坏,当我从Order
导航到Orders
时,Order
被破坏。
Orders 类中的按钮点击事件处理程序:
private void ShowOrder(object sender, RoutedEventArgs e)
Order order = new Order();
Switcher.Switch(order);
Order 类中的返回按钮点击处理程序
public UserControl parent;
private void ReturnBack(object sender, RoutedEventArgs e)
Switcher.Switch(parent);
【问题讨论】:
【参考方案1】:我通常会做下一个使用 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>
【讨论】:
以上是关于WPF 导航和销毁当前 UserControl的主要内容,如果未能解决你的问题,请参考以下文章