WPF - Erweitern Fenster links
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.
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.
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:
Sie können Ihre Expander in einem Raster setzen (wo die Spaltengröße ändern kann) und dann die ExpandDirection Eigenschaft Ihres Expanders nach links?