Tengo una ventana de WPF con SizeToContent="Height"
. Esta ventana contiene un <Expander />
que muestra una lista de actividades recientes. Lo que me gustaría es que cuando se expande el expansor, la ventana crezca en tamaño proporcionalmente. Cuando está oculta, la ventana vuelve a cambiar de tamaño proporcionalmente. Si se cambia el tamaño de la ventana, el expansor y su vista de lista contenida deberían crecer para usar el nuevo espacio. (No les importa los colores que hay allí para ayudarme a resolver esto):¿Cómo se puede mantener el tamaño de la ventana de WPF al contenido con un expansor después de cambiar el tamaño
Vista normal
alt text http://www.deploylx.com/so/wpfexpander/Open.png
colapsado
alt text http://www.deploylx.com/so/wpfexpander/Closed.png
redimensionada a la nueva espacio
alt text http://www.deploylx.com/so/wpfexpander/Expanded.png
Hasta ahora, esto funciona muy bien. El problema surge cuando el <Expander />
se contrae después de cambiar el tamaño de la ventana. En lugar de la ventana de colapsar de nuevo, la vista de lista es simplemente oculta:
se derrumbó después de cambiar el tamaño
alt text http://www.deploylx.com/so/wpfexpander/Collapsed.png
Mi intuición me dice que el Height
de la ventana se está estableciendo cuando la ventana cambia de tamaño y por lo tanto, anula la propiedad SizeToContent
. Entonces, ¿cómo puedo obtener la ventana para mantener su tamaño al comportamiento del contenido después de que ha sido redimensionado?
XAML actual:
<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>
ACTUALIZACIÓN: He intentado escuchar el evento colapsada del expansor y restablecer la propiedad de Windows SizeToContent
. Esto casi funciona Causará que vuelva a colapsar la ventana, pero cuando se expanda nuevamente, volverá a la altura original de 100 píxeles. Si bien es posible almacenar y capturar esta información, huele malhumorado y propenso a errores.
Sí ... restablecer la propiedad SizeToContent tiene el mismo efecto básico, pero entonces se pierde ampliado estado :(. Aún trabajando en esto. –
¿Alguien puede explicar lo que significa Tom? ¿Cómo se establece la altura o el ancho en Double.NaN? – DeveloperDan
En respuesta a ciertos eventos, puede establecer Control.Height = Double.Nan; – Thomas