当ListBox滚动时,WPF窗口会调整大小

时间:2010-07-13 13:35:08

标签: c# .net wpf xaml

我希望将窗口大小设置为列表框中的项目。列表框包含可变长度字符串(20到120个字符)。当我滚动列表框并且列表框中的较长字符串滚动显示时,列表框会缩小,我的窗口会随之缩小。如何在用户滚动时保持窗口大小固定,但仍然保持窗口最初的大小为内容。你知道,蛋糕也吃了。

<Window x:Class="MyApp.MyDialog
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyApp"
xmlns:sys="clr-namespace:System;assembly=mscorlib"        
Title="My Dialog" MaxHeight="600" SizeToContent="WidthAndHeight" ShowInTaskbar="False" Width="Auto" Height="Auto" Loaded="Window_Loaded">

<Grid Width="Auto" Height="Auto" Margin="5,5,5,5">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition></RowDefinition>
        <RowDefinition Height="48" ></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <StackPanel Orientation="Horizontal" Grid.Row="0" >
        <TextBlock>Total: </TextBlock>
        <TextBlock Text="{Binding myData.Count}"></TextBlock>
    </StackPanel>
    <ListBox Grid.Row="1" ItemsSource="{Binding myData}"/>
    <Button Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" Height="28" Click="buttonOK_Click" Margin="0,5,0,5" IsDefault="True" Name="buttonOK" Width="75">OK</Button>
</Grid>

2 个答案:

答案 0 :(得分:0)

我认为您应该删除您的sizetocontent属性,并根据您的列表框内容以编程方式调整窗口大小。

答案 1 :(得分:0)

我偶尔会要求窗口大小最初适合其内容,然后保持大小固定,除非明确调整大小。通常,我只是挂钩窗口的ContentRendered事件,并清除事件处理程序中的SizeToContent属性(并取消挂起事件)。这样可以确保布局完全完成,并且窗口已经显示,并且在您恢复到固定大小时,它的边界将完全计算出来。

这不是世界上最好的解决方案,如果在ContentRendered事件触发时您的内容无法完全可用,它就会崩溃。我能想到的最可能的例子是视图模型中的数据是否尚未可用,因此,您的视图尚未完全填充。这对您来说可能不是问题 - 这取决于您的设计以及您是否正在执行任何延迟/异步数据加载。但它适用于更简单的场景,它具有易于实现的优点。