2011-01-02 5 views
9

Я хочу программно переключаться между двумя моими пользовательскими элементами управления AddUsers.xaml (пользовательский контроль) и Viewusers.xaml (пользовательский контроль) программно в Window1.xaml (главное окно).Добавление пользовательского контроля/страницы в Windows xaml программно в WPF

iam пытается переключить пользовательские элементы управления с помощью кнопки Event в Window1.xaml. я ничего не нашел в сети, так что любое тело может помочь мне.

мое окно1. XAML идет как этот

<Window x:Class="SwitchUsers.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="500" Width="525"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="100" /> 
     <RowDefinition Height="400*" /> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0" > 
    <Button Content="Swithc User Control " Height="23" HorizontalAlignment="Right"  Margin="0,40,284,0" Name="btnSwittch" VerticalAlignment="Center" Width="168" /> 
    </StackPanel> 

    <StackPanel Grid.Row="1" > 
     <!--Here I want to display two user controls by switching from button on Top -->    
    </StackPanel> 
</Grid> 

У меня есть два пользователя управления addUser.xaml и viewUser.xaml

AddUser. XAML код:

<UserControl x:Class="SwitchUsers.addUser" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" Loaded="UserControl_Loaded"> 
    <Grid> 
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="29,79,0,0" Name="textBlock1" Text=" Enter Your Name" VerticalAlignment="Top" /> 
    <TextBlock Height="23" HorizontalAlignment="Left" Margin="29,105,0,0" Name="textBlock2" Text="Enter Your Password" VerticalAlignment="Top" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="144,76,0,0" Name="txtBxName" VerticalAlignment="Top" Width="120" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="144,105,0,0" Name="txtBxPassword" VerticalAlignment="Top" Width="120" /> 
    <Button Content="Log In" Height="23" HorizontalAlignment="Left" Margin="171,160,0,0" Name="btnLogin" VerticalAlignment="Top" Width="93" /> 
    </Grid> 
    </UserControl> 

и мой второй Контрол пользователь viewUser.xaml

<UserControl x:Class="SwitchUsers.viewUser" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid> 
    <!-- I hidden all UI Controls here to keep code short -->  
    </Grid> 
</UserControl> 

ответ

11

Прежде всего, необходимо дать ваш стек панели имя

<StackPanel Name="myStack" Grid.Row="1" > 
</StackPanel> 

Тогда вам нужно что-то похожее на

public partial class MainWindow : Window 
{ 
    private addUser _addUser; 
    private viewUser _viewUser; 
    private Control _currentUser; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     _addUser = new addUser(); 
     _viewUser = new viewUser(); 
     _currentUser = _viewUser; 
     myStack.Children.Add(_currentUser); 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     myStack.Children.Clear(); 
     if (_currentUser == _addUser) 
     { 
      _currentUser = _viewUser; 
     } 
     else 
     { 
      _currentUser = _addUser; 
     } 
     myStack.Children.Add(_currentUser); 
    } 

} 
+0

@John Petrak, я получаю ошибку – Panindra

+0

@Joun Petrak, я получаю сообщение об ошибке с приведенным выше кодом. Заголовок ошибки «ArgumentNullExecption не обрабатывается» и «Значение» не может быть нулевым. Имя параметра: Дети «System.Windows.Controls.UIElementCollection» не могут быть пустыми. Объект, полученный из ожидаемого UIElement. » – Panindra

+0

Iam Извините, это была моя ошибка при кодировании. Теперь это работает, может ли это повлиять на perfromace, если у usercontrol есть много элементов управления пользовательского интерфейса с загрузкой данных из базы данных ... будет ли какая-нибудь ошибка? .. if так что я могу использовать фона рабочего для выполнения этого переключателя b/w userscontrol – Panindra

Смежные вопросы