Wie behälst du das WPF-Fenster nach der Größenänderung auf Inhalt mit einem Expander
Ich habe ein WPF-Fenster mit SizeToContent="Height"
. Dieses Fenster enthält eine <Expander />
zeigt eine Liste der letzten Aktivitäten. Was ich möchte ist, wenn der expander erweitert das Fenster wächst in der Größe proportional. Wenn Sie versteckt das Fenster wieder ändert sich die Größe proportional. Wenn das Fenster geändert wird, kann der expander und es enthalten Listenansicht wachsen soll, verwenden Sie den neuen Raum. (nicht Sinn der Farben gibt es, um mir zu helfen dies herauszufinden):
Normalen Ansicht
alt-text http://www.deploylx.com/so/wpfexpander/Open.png
Zusammengebrochen
alt-text http://www.deploylx.com/so/wpfexpander/Closed.png
Angepasst, um neuen Raum
alt-text http://www.deploylx.com/so/wpfexpander/Expanded.png
Bisher in diesem großen Werke. Das problem kommt, wenn die <Expander />
ist zusammengebrochen, nachdem das Fenster in der Größe geändert wird. Anstatt die Fenster Zuklappen, wieder, der Liste, der Blick ist einfach ausgeblendet:
Brach nach Größe
alt-text http://www.deploylx.com/so/wpfexpander/Collapsed.png
Meine intuition sagt mir, dass die Height
des Fensters wird gesetzt, wenn das Fenster ändert und somit überschreibt die SizeToContent
Eigenschaft. So, wie bekomme ich die Fenster zu halten, es ist eine Größe, Inhalt, Verhalten, nachdem es geändert wurde?
Aktuelle XAML:
<Window x:Class="DeployLX.Licensing.Nlm.Admin.v3.DashboardWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Dashboard" Width="504" SizeToContent="Height" Height="275">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="E_xit" Command="{Binding Path=CloseCmd}" />
</MenuItem>
</Menu>
<Grid DockPanel.Dock="Top" Margin="8" ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" Margin="0,0,8,0">
<Rectangle Fill="Red" />
<TextBlock>ActiveCount</TextBlock>
</Grid>
<Grid Grid.Row="0" Grid.Column="1" Margin="0,0,0,4">
<Rectangle Fill="Green" />
<TextBlock>Authorization</TextBlock>
</Grid>
<Grid Grid.Row="1" Grid.Column="1" Margin="0,4,0,0">
<Rectangle Fill="Blue" />
<TextBlock>Authorization</TextBlock>
</Grid>
</Grid>
<Expander Header="Recent Activity" Margin="8" IsExpanded="True">
<ListView IsSynchronizedWithCurrentItem="True" MinHeight="100">
<ListView.View>
<GridView>
<GridViewColumn Header="Status"/>
</GridView>
</ListView.View>
</ListView>
</Expander>
</DockPanel>
</Window>
UPDATE: ich habe versucht, das hören auf den reduzierten Ereignis des Expanders und das zurücksetzen der Windows SizeToContent
Eigenschaft. Diese fast funktioniert. Es führt zu einem Zusammenbruch wieder aus dem Fenster, aber wenn wieder erweitert geht es wieder auf die ursprünglichen 100 pixel Höhe. Es ist zwar denkbar, speichern und erfassen diese info, es riecht hacky und anfällig für Fehler.
InformationsquelleAutor der Frage Paul Alexander | 2009-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dann müssen Sie Ihre Fenster nicht in der Größe geändert werden, wenn du gehst zu verwenden SizeToContent. Auch, sollten Sie nicht verwenden SizeToContent="Höhe", und legen Sie dann eine explizite Höhe. Denken Sie darüber nach - die sollte man WPF glauben für die Fenster-Höhe, der Einstellung des Benutzers oder den Inhalt? Es kann sich nicht einfach hin und her wechseln zwischen den beiden.
InformationsquelleAutor der Antwort Paul Betts
Am einfachsten zu bewältigen ist, nehmen Sie die manuelle Größenänderung aus der Gleichung durch die Einstellung
ResizeMode="NoResize"
auf das Fenster. Jedochwenn SieWindowStyle="None"
ich habe bemerkt, dass auf Vista Aero-dies bewirkt, dass das Fenster vollständig vergossen "chrome" und sieht das Fenster seltsam. Auch diese etwas von einem cop aus da es aussieht wie Sie wollen, um dem Benutzer die Größenänderung Funktionen.Das problem ist, dass Sie zwei widersprüchliche Ziele: 1.) Sie wollen immer
SizeToContent="Height"
wenn jetzt noch die expander-Steuerelement, 2.) Sie möchtenSizeToContent="Height"
bei der Erweiterung des expander-Steuerelement es sei denn, der Benutzer hat das Fenster manuell in der Größe angepasst (SizeToContent="Handbuch"), in welchem Fall Sie möchten, um zurückzukehren, um die Bedienungsanleitung der Höhe.Huch. Ich glaube nicht, dass Sie bekommen können, um das speichern der erweiterten Höhe selbst. WPF nicht daran erinnern, die Bedienungsanleitung Höhe beim ausbau sobald Sie wieder zu
SizeToContent="Height"
in Ihr zusammengebrochen event-handler.InformationsquelleAutor der Antwort Rob Sobers
Versuchen, diese, dies sollte sich Ihren Bedürfnissen anpassen:
SizeToContent="WidthAndHeight" Height="Auto" Width="Auto"
InformationsquelleAutor der Antwort Marcel Kuster
Als entdeckte ich in der meine Fragedie Einstellung der Höhe zu Verdoppeln.NaN bewirkt, dass es zurückgesetzt SizeToContent Glück. Ich weiß nicht, ob Sie sich erinnern, die Größe des expander, obwohl. Sie könnten versuchen, Kent Resizer-Bedienungselement, um die Dimensionierung Verhalten der expander eher als das enthaltende Fenster.
InformationsquelleAutor der Antwort Thomas
Habe ich gefunden, dass die Inbetriebnahme der Körper von meinem Fenster in einer Ansicht und dann setzen Sie die Ansicht als die einzige Kind-Fenster gelöst, die ähnliche Probleme...
Nicht die erstrebenswerte Lösung, aber es scheint zu funktionieren.
InformationsquelleAutor der Antwort John Weldon