Использование usercontrol в Wfp при нажатии кнопки - PullRequest
0 голосов
/ 27 марта 2019

Я работаю с пользовательскими элементами управления.

У меня есть базовая форма, которая имеет 2 кнопки btn_UC1, btn_UC2 и панель У меня есть 2 пользовательских элемента управления uc1, uc2, которые имеют разные инструменты для отображения различных данных что я хочу сделать:

При нажатии btn_UC1 я хочу показать uc1 на панели по клику btn_UC2 хочу показать uc2 на панели

Но я не хочу закрывать, очищать, удалять uc1 по щелчку btn_UC2, он должен быть в фоновом режиме.

И та же функциональность при щелчке btn_UC1

Также, когда я закрываю uc2, он должен показывать uc1

Я пытался использовать функцию очистки, при которой вызывается panel.cchildren.clear, прежде чем показывать какой-либо пользовательский контроль.

C# WPF
        UC1 Control1 = new UC1();
        UC2 Control2 = new UC2();



 private void btn_UC1_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                //pnl_UC.Children.Remove(Control2);
                pnl_UC.Children.Clear();
                pnl_UC.Children.Add(Control1);
            }
            catch (Exception err)
            {


            }

        }

 private void btn_UC2_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                pnl_UC.Children.Remove(Control1);
                // pnl_UC.Children.Clear();
                pnl_UC.Children.Add(Control2);
            }
            catch (Exception err)
            {


            }

        }
    <Window x:Class="UserControlTest.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:UserControlTest"
            mc:Ignorable="d"
            Title="MainWindow" Height="449.024" Width="870.182"
             >
        <Grid>
            <Button x:Name="btn_UC1" Content="Button" HorizontalAlignment="Left" Margin="65,62,0,0" VerticalAlignment="Top" Width="159" Height="34" Click="btn_UC1_Click"/>
            <Button x:Name="btn_UC2" Content="Button" HorizontalAlignment="Left" Margin="65,162,0,0" VerticalAlignment="Top" Width="159" Height="34" Click="btn_UC2_Click"/>
            <StackPanel x:Name="pnl_UC" HorizontalAlignment="Left" Height="399" Margin="281,10,0,0" VerticalAlignment="Top" Width="573">

            </StackPanel>

        </Grid>
    </Window>

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Я предлагаю вам использовать ItemsControl с привязкой к ObservableCollection, и из своего кода вы можете добавлять / удалять вещи из этой ObservableCollection. Это больше mvvm.

0 голосов
/ 27 марта 2019

Вы удаляете Control1 из панели при нажатии btn_UC2.удалите это из своего кода, как показано ниже

private void btn_UC2_Click(object sender, RoutedEventArgs e)
       {
           try
           {

               pnl_UC.Children.Add(Control2);
           }
           catch (Exception err)
           {


           }

       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...