【问题标题】:WPF navigation and destroy current UserControlWPF 导航和销毁当前 UserControl
【发布时间】:2016-08-04 11:50:03
【问题描述】:

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

我有一个 UserControl Orders 和另一个 UserControl OrderOrders 显示在 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);
}

【问题讨论】:

    标签: c# wpf xaml user-controls


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2011-01-18
      相关资源
      最近更新 更多