2010-07-13 39 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事件觸發時,完全可用。我能想到的最有可能的例子是如果視圖模型中的數據尚不可用,並且因此您的視圖尚未完全填充。這對你來說可能不是問題 - 這取決於你的設計以及你是否在做任何延遲/異步數據加載。但它在更簡單的情況下工作,並且具有易於實現的優點。

相關問題