我希望将窗口大小设置为列表框中的项目。列表框包含可变长度字符串(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>
答案 0 :(得分:0)
我认为您应该删除您的sizetocontent属性,并根据您的列表框内容以编程方式调整窗口大小。
答案 1 :(得分:0)
我偶尔会要求窗口大小最初适合其内容,然后保持大小固定,除非明确调整大小。通常,我只是挂钩窗口的ContentRendered
事件,并清除事件处理程序中的SizeToContent
属性(并取消挂起事件)。这样可以确保布局完全完成,并且窗口已经显示,并且在您恢复到固定大小时,它的边界将完全计算出来。
这不是世界上最好的解决方案,如果在ContentRendered
事件触发时您的内容无法完全可用,它就会崩溃。我能想到的最可能的例子是视图模型中的数据是否尚未可用,因此,您的视图尚未完全填充。这对您来说可能不是问题 - 这取决于您的设计以及您是否正在执行任何延迟/异步数据加载。但它适用于更简单的场景,它具有易于实现的优点。