繁体   English   中英

WPF 导航并销毁当前用户控件

[英]WPF navigation and destroy current UserControl

我正在尝试在我的 WPF 应用程序中构建一个小型导航系统。 我正在使用教程在页面之间导航。 我想为一个UserControl在它上面添加“返回”功能。

我有一个 UserControl Orders和另一个 UserControl Order Orders显示在 MainWindow 中,当我单击按钮时, Order UserControl应显示在 MainWindow 的同一位置。 我试图在Order用户控件中放置对Orders用户控件的引用,并通过Order导航到Orders 但是Order并没有被破坏,因为我使用的是那个类的变量。

我如何确保当我导航到Order表单OrdersOrders不会被销毁,而当我从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM