Announcement

Collapse
No announcement yet.

[WPF] Übergabe an weiteres Fenster

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [WPF] Übergabe an weiteres Fenster

    Hallo,

    Ich habe für eine Anwendung einen eigenen Dialog auf Basis eines Window-Element erstellt.
    Dort kann ich als Parameter bei der Initialisierung einige Dinge per Parameter steuern:
    • Titel
    • Infotext
    • Icon
    • mit/ohne Eingabefeld
    • Schaltflächenanzeige: OK, OKCancel, Yes, YesNo, YesNoCancel
    Prinzipiell funktioniert alles wie gewünscht, das Fenster wird angezeigt und je nach Einstellungen wird der entsprechende Text und das Eingabefeld angezeigt.
    Probleme bereiten gerade die Schaltflächen.

    Ich habe diese, wie alles andere auch gebunden, in diesem Fall an die Visibility:
    Code:
    <Button Margin="1,0" Padding="10,5" Content="Ok" Click="SendFeedback" Visibility="{Binding BtnOK}"/>
    <Button Margin="1,0" Padding="10,5" Content="Ja" Click="SendFeedback" Visibility="{Binding BtnYes}"/>
    <Button Margin="1,0" Padding="10,5" Content="Nein" Click="SendFeedback" Visibility="{Binding BtnNo}"/>
    <Button Margin="1,0" Padding="10,5" Content="Abbrechen" Click="SendFeedback" Visibility="{Binding BtnCancel}"/>
    Für die Bindungsvariablen habe ich Fullproperties angelegt, hier exemplarisch für OK:
    Code:
    private Visibility _btnOK;
    public Visibility BtnOK {
        get { return _btnOK; }
        set { _btnOK = value; OnPropertyChanged("BtnOK"); }
    }
    wie man sieht, nutze ich dafür das INotifyPropertyChange-Interface.

    Ebenso habe ich mir eine Fullproperty für die Übergabe angelegt:
    Code:
    private MessageBoxButton _dialogButtons;
    public MessageBoxButton DialogButtons {
        get { return _dialogButtons; }
        set { _dialogButtons = value; OnPropertyChanged("DialogButtons"); }
    }
    Alle anderen parametrisierten Eigenschaften sind auf die gleiche Weise angelegt.
    Die Übergabe und Initiierung des Window erfolgt auf diese Weise:
    Code:
    DialogBox box = new DialogBox
    {
        Owner = this,
        DataValues = this.DataValues,
        DialogBoxTitle = "Screenshot senden",
        DialogStaticText = "Ein Screenshot wurde erstellt, füge unten bitte ein kurze Problembeschreibung ein.\r\nBei Klick auf OK wird diese mit dem Screenshot zusammen per Mail an den Support gesendet.",
        WithFeedback = true,
        //DialogButtons = MessageBoxButton.OKCancel
    };
    
    box.ShowDialog();
    So funktioniert alles, wie es soll. Wenn ich jedoch die Zeile für die DialogButtons wieder einsetze, wird nur die OK-Schaltfläche angezeigt.
    Kurios für mein Verständnis ist auch: Wenn ich mir anzeigen lasse, welchen Wert DialogButtons hat, erscheint auch das Eingabefeld nicht?!

    Die Anzeige der Buttons steuere ich derzeit über ein switch:
    Code:
                switch ( this.DialogButtons )
                {
                    case MessageBoxButton.OK:
                        BtnOK = Visibility.Visible;
                        break;
                    case MessageBoxButton.OKCancel:
                        BtnOK = Visibility.Visible;
                        BtnCancel = Visibility.Visible;
                        break;
                    case MessageBoxButton.YesNo:
                        BtnYes = Visibility.Visible;
                        BtnNo = Visibility.Visible;
                        break;
                    case MessageBoxButton.YesNoCancel:
                        BtnYes = Visibility.Visible;
                        BtnNo = Visibility.Visible;
                        BtnCancel = Visibility.Visible;
                        break;
                    default:
                        BtnCancel = Visibility.Visible;
                        break;
                }
    zuvor wurden alle Schaltflächen auf Collapsed gesetzt.

    Hat jemand mögliche Erklärungen für das Verhalten?
    Falls weitere Infos benötigt werden, stelle ich die gerne noch zur Verfügung.


    Danke
    Arne
    Zuletzt editiert von Arne Drews; 25.06.2019, 08:44.
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Ich habe den switch()-Block jetzt ausgelagert und den Aufruf in den Setter der Fullproperty DialogButtons verschoben:
    Code:
    private MessageBoxButton _dialogButtons;
    public MessageBoxButton DialogButtons {
        get { return _dialogButtons; }
        set {
            _dialogButtons = value;
            OnPropertyChanged("DialogButtons");
    
            this.SetVisibleButtons();
        }
    }
    Auf die Weise funktioniert es. Vom Prinzip her ist das auch nachvollziehbar, aber warum das von außerhalb nicht geht und ob das aktuell ne gute Lösung ist, weiß ich nicht.
    Vielleicht hat ja jemand noch einen Kommentar dazu, ansonsten ist das Thema gelöst.
    PHP rocks!
    Eine Initiative der PHP Community

    Comment

    Working...
    X