6

我正在处理一个关于在展开器折叠后调整主窗口大小的问题,并且在此之前通过拖放手动将窗口调整为更大的大小。扩展器已折叠,但主窗口未调整大小以“适合”内部组件大小。

组件放置到自动调整大小的网格列,主窗口设置为宽度和高度大小的内容。

主窗口属性集:

SizeToContent="WidthAndHeight"

我已经通过背后的代码和事件处理程序(在折叠和展开事件上)完成了解决方案。但我认为 WPF 有更好的方法......

扩展器 XAML 实现:

<Expander Name="expander" Grid.Column="2" Grid.Row="0" Grid.RowSpan="5" ExpandDirection="Right" ToolTip="Expand window for history details" Expanded="Expander_Expanded" Collapsed="Expander_Collapsed" SizeChanged="expander_SizeChanged" >
        <Expander.Header>
            <TextBlock RenderTransformOrigin="0.3,1.5">
                    <TextBlock.RenderTransform>
                        <TransformGroup>
                            <RotateTransform Angle="90" />
                        </TransformGroup>
                    </TextBlock.RenderTransform>
                    Show history
                </TextBlock>
        </Expander.Header>
        <StackPanel>               
            <ListView ItemsSource="{Binding Path=HistoryList}" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" MaxHeight="350" >
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Operation" DisplayMemberBinding="{Binding Operation}" />
                    <GridViewColumn Header="Result" DisplayMemberBinding="{Binding Result}" />
                </GridView>
            </ListView.View>
        </ListView>
        </StackPanel>
    </Expander>

有谁知道如何智能解决这个案子?

感谢您的建议。

4

1 回答 1

3

一旦您手动调整 Window 的大小,SizeToContent 属性似乎就会失去其值,要解决此问题,只需订阅 Window 的 OnSizeChanged 事件,然后重置 SizeToContent 属性:

XAML:

<Window SizeToContent="WidthAndHeight" SizeChanged="MainWindow_OnSizeChanged">

代码隐藏:

private void MainWindow_OnSizeChanged(object sender, SizeChangedEventArgs e)
{
    SizeToContent = SizeToContent.WidthAndHeight;
}
于 2013-08-08T12:06:12.220 回答