2011-01-02 10 views
9

que quiero cambiar entre mis dos controles de usuario AddUsers.xaml (control de usuario) y Viewusers.xaml (Control de usuario) mediante programación en Window1.xaml (ventana principal).adición de control de usuario/Página de ventanas XAML en WPF programáticamente

iam tratando de cambiar los controles de usuario mediante el botón Evento en Window1.xaml. No encontré nada en la red, así que cualquier cuerpo puede ayudarme.

mi Window1. xaml dice así

<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> 

tengo dos controles de usuario y addUser.xaml viewUser.xaml

addUser. código 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> 

y mi segunda controle usuario 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> 

Respuesta

11

primer lugar usted necesita para darle a su panel de pila un nombre

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

Luego hay algo similar a

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, estoy recibiendo el error – Panindra

+0

@Joun Petrak, recibo un error con el código anterior. Título de error "ArgumentNullExecption no se ha manejado". El mensaje es "El valor no puede ser nulo". Nombre del parámetro: Los elementos secundarios de 'System.Windows.Controls.UIElementCollection' no pueden ser nulos. Objeto derivado de UIElement esperado. " – Panindra

+0

Lo siento, fue un error al codificar ... ahora está funcionando, ¿puede afectar esto a la función si el control de usuario tiene muchos controles de UI con la carga de datos desde databse ... se bloqueará la aplicación? ... si así que puedo utilizar trabajador de fondo para llevar a cabo este interruptor b/w userscontrol – Panindra