2010-07-13 43 views
0

我想将窗口大小设置为列表框中的项目。列表框包含可变长度字符串(20到120个字符)。当我滚动列表框中的列表框和更长的字符串滚动显示时,列表框缩小,我的窗口随之缩小。当用户滚动时,如何保持我的窗口大小不变,但窗口初始大小仍为内容。你知道,蛋糕也吃了。当ListBox滚动时,WPF窗口调整大小

<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> 

回答

0

我想你应该删除您sizetocontent财产和编程,你想根据您的列表框的内容调整窗口的大小。

0

我有时需要一个窗口大小以适应其内容,然后保持大小不变​​,除非明确调整大小。通常情况下,我只需挂上窗口的ContentRendered事件,并清除事件处理程序中的SizeToContent属性(并解除事件)。这确保了布局已经完全完成,并且窗口已经显示,并且在您恢复到固定大小时完全计算窗口的边界。

这不是世界上最好的解决方案,它打破了在情况下,你的内容是不ContentRendered事件触发时,完全可用。我能想到的最有可能的例子是如果视图模型中的数据尚不可用,并且因此您的视图尚未完全填充。这对你来说可能不是问题 - 这取决于你的设计以及你是否在做任何延迟/异步数据加载。但它在更简单的情况下工作,并且具有易于实现的优点。

相关问题