Pau*_*der 54 .net wpf sizetocontent
我有一个WPF窗口SizeToContent="Height".此窗口包含<Expander />显示最近活动列表的窗口.我想要的是当扩展器扩展时,窗口的大小按比例增长.隐藏时,窗口会再次按比例调整大小.如果窗口调整大小,扩展器和它包含的列表视图应该增长到使用新空间.(不要介意那里的颜色来帮助我解决这个问题):
普通视图
alt text http://www.deploylx.com/so/wpfexpander/Open.png
倒塌
alt text http://www.deploylx.com/so/wpfexpander/Closed.png
调整到新的空间
替代文字http://www.deploylx.com/so/wpfexpander/Expanded.png
到目前为止,这很有效.<Expander />调整窗口大小后折叠时出现问题.而不是窗口再次折叠,列表视图只是隐藏:
调整大小后折叠
替代文字http://www.deploylx.com/so/wpfexpander/Collapsed.png
我的直觉告诉我,Height当窗口调整大小并因此覆盖SizeToContent属性时窗口的设置正在被设置.那么,在调整大小后,如何让窗口保持内容行为的大小?
目前的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>
Run Code Online (Sandbox Code Playgroud)
更新:我已经尝试收听扩展器的Collapsed事件并重置Windows SizeToContent属性.这几乎可行.这将导致它再次折叠窗口,但再次展开时,它会回到原来的100像素高度.虽然存储和捕获这些信息是可行的,但它闻起来很容易出错并容易出错.
Ana*_*tts 62
如果要使用SizeToContent,则必须使窗口不可调整大小.此外,您不应使用SizeToContent ="Height",然后设置显式高度.想一想 - WPF应该相信窗口高度,用户设置或内容?它不能只在两者之间来回切换.
Rob*_*ers 11
最简单的应对方法是通过设置ResizeMode="NoResize"窗口来手动调整大小. 但是,如果你WindowStyle="None"已经注意到在Vista Aero上,这会导致窗口完全脱落"铬",窗口看起来很尴尬.此外,这有点像警察,因为它看起来像你想给用户调整大小功能.
问题是你有两个相互冲突的目标:1.)你总是想要SizeToContent="Height"在折叠扩展器控件时,2.)SizeToContent="Height"扩展扩展器控件时你想要的除非用户手动调整窗口大小(SizeToContent ="Manual"),其中如果您想返回用户的手动高度.
让人惊讶.我不认为你可以自己保存扩大的高度.一旦您恢复到SizeToContent="Height"折叠事件处理程序,WPF将不会记住用户的手动高度.