2017-08-23 3 views
0

J'ai une classe X et il y a des boutons qui sont cachés sous une grille. L'un des boutons visibles en double-clic ouvre la fenêtre de connexion (déclarée en classe Y). Maintenant, après la connexion réussie, je voudrais rendre la grille cachée (parce que les boutons sont derrière cette grille). comment puis-je rendre la grille déclarée dans la classe X Masqué après une connexion réussie dans la classe Y.Comment puis-je modifier la visibilité d'une grille déclarée dans une autre classe après une connexion réussie?

class X code: 

<Grid Background="Black" x:Name="smallAGrid" x:FieldModifier="public" 
Opacity="0.8" Grid.Column="1" Visibility="Visible" /> 
    <Grid Background="Black" x:Name="bigBGrid" x:FieldModifier="public" 
    Opacity="0.8" Grid.Column="1" Grid.ColumnSpan="2" Visibility="Visible"/> 
    <Grid Name="ModeGrid" > 
    <Button Content="Gateway" Height="42" x:Name="maintenanceMode" 
     Width="148" Click="maintenanceMode_Click"/> 
     <Popup Placement="Center" x:Name="passwordProtectionPopUp" 
      AllowsTransparency="True"> 
      <Grid> 
       <local:Y Width="350" Height="Auto" Margin="0,0,0,0" />               
      </Grid> 
     </Popup> 
    </Grid> 

class Y code: 

private void Submit_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     if (sqlCon.State == System.Data.ConnectionState.Closed) 
       sqlCon.Open(); 
      //rest of the login code here 
    } 
      // after Successful login i would like to do 
      X x = new X(); 
      x.smallAGrid.Visibility = Visibility.Hidden; 
      } 
    catch 
    { 
    } 

Note: Mais Iam incapable de changer la visibilité .Après mettre point d'arrêt, je l'ai vérifié va à ma classe X et cette fonction de la visibilité, mais il ne change pas ???

+0

Pourquoi ne pas vous fournir une fonction de rappel ou et événement dans la classe Y, que avant d'ouvrir un popup inscrivez-vous pour le rappel de 'Login_Success' e clss X, et quand cet événement/rappel est appelé, désactivez vos boutons sous la grille –

+0

Je ne veux pas désactiver mes boutons sous la grille. Je veux juste que ma grille couvre juste mes commandes et qu'une fois que quelqu'un s'est connecté avec succès que la grille est cachée et qu'ils pourraient voir les boutons. Comment puis-je cacher ma grille dans la classe X de la classe Y. – user6850427

+0

ce qui se passera dans ma classe Y. Je n'ai pas de constructeur pour prendre ces deux paramètres? Maintenant, avec le bouton, il ouvre la fenêtre de connexion et, en cas de succès, affiche un message de réussite. Je suis tellement confus?? - – user6850427

Répondre

0

trouvé répondre à sa très simple il suffit de déclarer le contrôle que vous souhaitez accéder en statique dans la classe d'origine et les attribuer aux noms de contrôle d'origine et dans d'autres classes où vous souhaitez accéder à faire:

y class code 
private void Submit_Click(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     if (sqlCon.State == System.Data.ConnectionState.Closed) 
      sqlCon.Open(); 
      //rest of the login code here 
      Grid vr= X.small; 
      vr.Visibility = Visibility.Collapsed; 
      } 

     catch 
    { 
    } 
     X Class code 
     public static Grid small; 
    public X() 
    { 
    InitializeComponent(); 
    small= smallAGrid // (name of grid control) 
    } 
0

En supposant que vous avez la classe X représentant une fenêtre parent et la classe Y représentant la fenêtre de connexion, vous pouvez utiliser quelque chose de similaire à:

Class X 
{ 
    Control grid; //grid which you want to show/hide 
    Button btnLogin; //button which opens up login window 

    public void BtnLogin_DoubleClicked(object sender, EventArgs args) 
    { 
     var loginWindow = new Y(LoginSuccessCallback, LoginFailureCallback); 
     loginWindow.ShowDialog(); 
    } 

    private void LoginSuccessCallback() 
    { 
     grid.Visibility = Visibility.Collapsed; 
    } 

    private void LoginFailureCallback() 
    { 
     grid.Visibility = Visibility.Visible; 
    } 
}