5 Stimmen

Wie machen WPF Combobox Dropdown bleibt offen & Platzierung

Ich möchte, dass die Combobox bearbeitbar ist und das Dropdown offen bleibt.

Im Moment sind diese Eigenschaften eingestellt:

IsEditable="True" IsDropDownOpen="True" StaysOpenOnEdit="True" 

Immer wenn der Benutzer auf das Eingabefeld klickt oder der Fokus auf ein anderes Steuerelement wechselt, wird das Dropdown-Feld geschlossen. Also habe ich die Vorlage aktualisiert (die Vorlage, die in WPF-Thema : BureauBlue), um die Popup IsOpen="true" In diesem speziellen Fall bleibt das Dropdown offen, aber wenn der Benutzer die Position des Fensters verschiebt, wird das Dropdown no seine Position automatisch aktualisieren und bleiben an der alten Stelle.

Wie kann ich erreichen, dass die Position automatisch aktualisiert wird, während sie geöffnet ist? ?

9voto

Pavlo Glazkov Punkte 20178

Sie können den hier beschriebenen Trick anwenden: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27950e73-0007-4e0b-9f00-568d2db1d979

Ich habe eine Blend-Verhalten die es einfach macht, mit jedem Popup zu arbeiten:

/// <summary>
/// A behavior that forces the associated popup to update its position when the <see cref="Popup.PlacementTarget"/>
/// location has changed.
/// </summary>
public class AutoRepositionPopupBehavior : Behavior<Popup> {
    public Point StartPoint = new Point(0, 0);
    public Point EndPoint = new Point(0, 0);

    protected override void OnAttached() {
        base.OnAttached();

        if (AssociatedObject.PlacementTarget != null) {
            AssociatedObject.PlacementTarget.LayoutUpdated += OnPopupTargetLayoutUpdated;
        }
    }

    void OnPopupTargetLayoutUpdated(object sender, EventArgs e) {
        if (AssociatedObject.IsOpen) {
            ResetPopUp();
        }
    }

    public void ResetPopUp() {
        // The following trick that forces the popup to change it's position was taken from here:
        // http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/27950e73-0007-4e0b-9f00-568d2db1d979
        Random random = new Random();
        AssociatedObject.PlacementRectangle = new Rect(new Point(random.NextDouble() / 1000, 0), new Size(75, 25));
    }
}

Hier ist ein Beispiel für die Anwendung dieses Verhaltens:

<Popup ...>
    <i:Interaction.Behaviors>
        <Behaviors:AutoRepositionPopupBehavior />
    </i:Interaction.Behaviors>
</Popup>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X