Frage

Ich habe ein WPF-Fenster mit erweiterbarer Platte (via Expander). Das Panel ist auf der linken Seite des Fensters, und wenn erweitert wächst das Fenster, um den Inhalt zu passen.

In der Standardeinstellung werden Fenster verankert links oben, so dass mein Fenster nach rechts wächst. Ich würde das Fenster wie auf der linken Seite wachsen.

Ich habe versucht, die folgenden in dem Window.SizeChanged Ereignisse zu tun:

private void onWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
    Left -= (e.NewSize.Width - e.PreviousSize.Width)
}

und es funktioniert, aber das Wachstum ist abgehackt, und ich möchte eine glattere Lösung finden.

War es hilfreich?

Lösung

ich es geschafft, dies mit einer einfachen Lösung zu überwinden. Hide & Show

Hier ist der Code:

protected override void OnRenderSizeChanged(SizeChangeInfo sizeInfo)
{
    if (!sizeInfo.WidthChanged)
    {
        base.OnRenderSizeChanged(sizeInfo);
        return;
    }
    Hide();
    base.OnRenderSizeChanged(sizeInfo);
    Left -= (sizeInfo.NewSize.Width - sizeInfo.PreviousSize.Width);
    Show();
}

I ersetzt den Event-Handler für Window.SizeChanged mit dieser Überschreibung von FrameworkElement.OnRenderSizeChanged.

Andere Tipps

Ich habe nicht wie machen Sie ein Fenster wachsen nach links versucht, was Sie anfordern, aber wenn alles andere fehlschlägt, würde ich Templating einen Knopf aussehen wie die Expander-Taste betrachten. Dann anstatt zu versuchen, Ihre Fenster, um nach links zu wachsen, stellt ein neues Fenster wächst nach links dem primären Fenster Wandelt verwendet wird.

UPDATE

Nun, die schlechte Wiedergabeleistung könnte Grafikkarte bezogen, Layout (zu komplex) bezogen oder beides sein. Ich habe eine Idee, die den Trick für Sie tun könnte. Jeff Prosise gebloggt eine Lupe in Silver, die eine WriteableBitmap verwendet die gewünschte Wirkung zu erzielen. Ich dachte: „warum nicht einen Writeablebitmap verwenden, um einen Screenshot von Ihrem Layout rechts von den Expandern zu schaffen, und decke die anderen Elemente mit ihm los?“. Ich glaube, wenn Sie dies tun, und verstecken die zugrunde liegenden Elemente (so sie nicht eingestellt bekommen), Performance-Rendering wird viel verbessert werden.

Ich habe Jeffs Code Arbeit in WPF mit wenig Änderung.

http://www.wintellect.com/CS/blogs/jprosise/archive/2009/10/29/more-fun-with-silverlight-3-s-writeablebitmap.aspx

Lösung 1

Versuchen Sie verwenden Fenstereigenschaft: SizeToContent = „width“ dieses Fenster auf die Größe Ihrer Inhalte skaliert und Sie können Ihre Inhalte mit Animation und Lockerung skalieren, das im Fenster schön Skalierung machen und glätten.

Lösung 2

Sie könnten ein Fenster erstellen, die als Inhalt es größer ist und machen Sie Ihren Hintergrund transparent. Sie haben noch Hintergrund zu einem Element hinzuzufügen.

Hier ist ein Beispiel dafür, wie es aussehen kann: Beispielbild

Sie können Ihre Expander in einem Raster setzen (wo die Spaltengröße ändern kann) und dann die ExpandDirection Eigenschaft Ihres Expanders nach links?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top