Bindung Textbox IsFocused auf Popup-IsOpen-plus zusätzliche Bedingungen

Ich habe eine TextBox und ein Popup Kontrolle. Ich will die Popup.IsOpen Eigenschaft gebunden werden, um die TextBox.IsFocused Eigenschaft. In anderen Worten, wenn die textbox den Fokus hat, wird das popup geöffnet ist. Alternativ, wenn das popup den Fokus hat, ich nicht wollen, es zu schließen, durch die textbox Fokus verlieren. Ich hatte gehofft, um dies zu umgehen, mithilfe Bindungen, anstatt auf den Umgang mit diesem Ereignis-Handler. Außerdem habe ich zu tun alles, was in Bezug auf die Abhängigkeit von Eigenschaften, da diese bereits vorhandenen(d.h. Register, überschreiben, Metadaten, etc), oder kann ich einfach eine Bindung an diese Eigenschaften.

Ist hier einige Beispiel-code ähnlich zu meinem Szenario

StackPanel sp = new StackPanel();
TextBox tb = new TextBox();
Popup popup = new Popup();

sp.Children.Add(tb);
sp.Children.Add(popup);
this.Content = sp;

Binding bd = new Binding("IsFocused");
bd.source = tb.IsFocused;
popup.SetBinding(Popup.IsOpenProperty, bd);

Von diesem ich war der Annahme, dass, wenn ich klickte auf das textbox-Steuerelement und gab es gefasst, dass das popup sich öffnen würde, und Umgekehrt, wenn die textbox den Fokus verloren, dass das popup schließen würde. Ich kann nicht scheinen, um diese zu arbeiten.

Wenn jemand eine Idee hat was ich falsch mache, dann vielleicht konnten Sie auch die Antwort auf die zweite Hälfte meiner Frage ist, dass, wenn das Textfeld den Fokus verliert, aber es war das popup, das den Fokus erhält, dass das popup-Fenster geöffnet bleibt, oder geben Sie den Fokus wieder auf die textbox, so dass es offen bleibt, bc der ersten Bindung. Jedes andere Steuerelement, das den Fokus erhält, wenn das Textfeld den Fokus verliert nicht für dieses Szenario gelten.

Wenn ich könnte, formulieren Sie dies für die übersichtlichkeit würde ich sagen, dass es wie dieses.

1.) Binden Popup.IsOpen zu TextBox.IsFocused

2.) Binden TextBox.IsFocused zu Popup.IsFocused(vorausgesetzt, dies wird nur geben Sie den Fokus zurück auf die textbox)


Hier ist mein erstes C# - Versuch. Noch etwas ist nicht ganz richtig. Nichts passiert, also bin ich mir nicht ganz sicher, wo mein Fehler ist.

        StackPanel sp = new StackPanel(); 
        TextBox tb = new TextBox(); 
        Popup popup = new Popup();

        TextBox popupTextBox = new TextBox();
        popup.Child = popupTextBox;


        sp.Children.Add(tb); 
        sp.Children.Add(popup); 
        this.Content = sp;


        //***Questions concerning giving the UIElement a name and registering it
        tb.Name = "siblingTextBox";
        System.Windows.NameScope.GetNameScope(tb).RegisterName("siblingTextBox", tb);

        //***Questions concerning giving the UIElement a name and registering it
        popupTextBox.Name = "popupTextBox";
        System.Windows.NameScope.GetNameScope(tb).RegisterName("popupTextBox", popupTextBox);

        Binding binding = new Binding();
        binding.ElementName = tb.Name;
        popup.PlacementTarget = tb;

        Style style = new Style();
        style.TargetType = typeof(Popup);

        DataTrigger dataTrigger = new DataTrigger();
        Binding focusedBinding = new Binding("IsFocused");
        focusedBinding.ElementName = tb.Name;
        dataTrigger.Value = true;
        dataTrigger.Binding = focusedBinding;

        Setter setter = new Setter();
        setter.Property = Popup.IsOpenProperty;
        setter.Value = true;
        dataTrigger.Setters.Add(setter);
        style.Triggers.Add(dataTrigger);

        dataTrigger = new DataTrigger();
        focusedBinding = new Binding("IsFocused");
        focusedBinding.ElementName = popupTextBox.Name;
        dataTrigger.Value = true;
        dataTrigger.Binding = focusedBinding;
        setter = new Setter();
        setter.Property = Popup.IsOpenProperty;
        setter.Value = true;
        dataTrigger.Setters.Add(setter);
        style.Triggers.Add(dataTrigger);

        popup.Style = style;

InformationsquelleAutor BrandonS | 2009-05-18

Schreibe einen Kommentar