2016-11-15 8 views
1

Ich versuche, eine Benutzersteuerung mit einem Klick auf die Schaltfläche zu schließen. Die Benutzersteuerung befindet sich in einem Raster des Hauptfensters.Schließen eines UserControl in einem Raster von MainWindow

So öffne ich es und es funktioniert.

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     UsLogin _UsLogin = new UsLogin(); 
     OpenUserControl(_UsLogin); 

    } 

    private void OpenUserControl(UsLogin _UsLogin) 
    { 
     grdVensters.Children.Add(_UsLogin); 
    } 
} 

Jetzt in der Benutzersteuerung habe ich eine Schaltfläche, um die Anmeldung zu bestätigen. (kein Code noch dies nur ein Modell in der Klasse zu zeigen, wie ich es aussehen soll) Ich möchte diese Schaltfläche, um diese Benutzersteuerung in GrdVensters zu schließen, damit ich mein Hauptfenster bereit habe.

Ich kann anscheinend nicht in meiner Benutzersteuerung auf grdVensters zugreifen. Kann ich eine Verbindung herstellen?

versucht: Close current UserControl aber beste Antwort schließt MainWindow, was ich nicht will.

Das sieht aus wie ich brauche, aber kann es nicht in meinem Fall funktionieren. Causing a UserControl to remove itself (WPF)

Vielen Dank im Voraus!

+0

hier Closing Show/Hide bedeuten könnte, oder es vom Netz Kinder Sammlung entfernen. Am besten wäre es, die Sichtbarkeitseigenschaft von UC auf der UC-Seite zu reduzieren, andernfalls können Sie den Baum nach oben durchsuchen, um auf das Raster zuzugreifen. Die 'VisualTreeHelper' Klasse wird Ihnen dabei helfen. – AnjumSKhan

+0

Ich bin mir nicht sicher, ob ich das Problem vollständig verstehe, aber ich verstehe und stimme Mat zu. Eine andere Lösung könnte darin bestehen, eine Aktion an die Steuerung zu übergeben. Wenn Sie auf die Schaltfläche im Steuerelement klicken, rufen Sie einfach die Aktion auf. Sie können die Aktion im Konstruktor übergeben oder sie einfach über eine Eigenschaft verfügbar machen. In der Implementierung der Aktion (in der Hauptfensterklasse) rufen Sie 'grdVensters.Children.Remove (_UsLogin);' auf. Dies sollte nicht zu viel Schweiß machen. Um ehrlich zu sein, würde ich MVVM gehen, da Sie WPF verwenden. –

Antwort

0

Sie sollten sich wirklich für MVVM entscheiden, wenn Sie mit WPF arbeiten möchten. Es gibt Tonnen von Ressourcen im Internet. Ich habe jedoch ein kleines Beispiel erstellt, das Sie in die richtige Richtung führen soll. Sie können die Anmeldungsansicht ein-/ausblenden, indem Sie die korrelierende Eigenschaft im ViewModel festlegen. Der BooleanToVisibilityConverter wandelt den bool Wert in einen Visibility Wert um. Ich habe auch eine CheckBox hinzugefügt, um ein einfaches Beispiel zu demonstrieren, wie Sie den sichtbaren Status ändern können.

XAML

<StackPanel> 
    <StackPanel.Resources> 
     <BooleanToVisibilityConverter x:Key="bToV" /> 
    </StackPanel.Resources> 
    <CheckBox IsChecked="{Binding Path=IsLoginVisible, UpdateSourceTrigger=PropertyChanged}" /> 
    <Button Content="Login" 
      Visibility="{Binding Path=IsLoginVisible, Converter={StaticResource bToV}}" /> 
    <!--<yournamespace:UsLogin Visibility="{Binding Path=IsLoginVisible, Converter={StaticResource bToV}}/>--> 
</StackPanel> 

Code hinter

public partial class MainWindow 
{ 
    public MainWindow() 
    { 
     this.InitializeComponent(); 

     DataContext = new MainViewModel(); 
    } 
} 

public class MainViewModel : ViewModelBase 
{ 
    private bool _isLoginVisible; 
    public bool IsLoginVisible 
    { 
     get 
     { 
      return _isLoginVisible; 
     } 
     set 
     { 
      _isLoginVisible = value; 
      OnPropertyChanged(); 
     } 
    } 
} 
+0

Hallo, danke, dass du dir die Zeit genommen hast zu antworten. Ich bin ein Student und wir haben MVVM noch nicht abgedeckt (wird in ein paar Wochen), aber das ist ein großartiges Beispiel. Ty! –

+0

@JurgenVolders Sie wollen also die Antwort akzeptieren? oder gib wenigstens einen upvote? ;-) – Mat

+0

Sorry war meine erste Frage überhaupt;) Ich akzeptierte und upvoted aber da mein rep atm unter 15 ist, wirst du es nicht sehen glaube ich. –

Verwandte Themen