簡體   English   中英

滾動ListBox時WPF窗口的大小調整

[英]WPF window resizes when ListBox scrolled

我希望窗口大小適合列表框中的項目。 列表框包含可變長度字符串(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>

有時,我有一個要求,即窗口大小最初要適合其內容,然后保持大小固定,除非明確調整大小。 通常,我只是鈎住窗口的ContentRendered事件,並清除事件處理程序中的SizeToContent屬性(並解鈎該事件)。 這樣可以確保布局完全完成,並且在還原到固定大小時,窗口已經顯示出來,並且邊界已完全計算出來。

這不是世界上最好的解決方案,當ContentRendered事件觸發時您的內容不完全可用時,它會崩潰。 我能想到的最可能的示例是,如果視圖模型中的數據尚不可用,因此您的視圖尚未完全填充。 對於您來說,這可能不是問題-這取決於您的設計以及是否要進行任何延遲/異步數據加載。 但是它可以在更簡單的場景中工作,並且具有易於實現的優點。

我認為您應該刪除您的sizetocontent屬性,並根據列表框內容以編程方式調整窗口的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM