阻止 ListBox 使用内容而不是窗口来调整大小

Posted

技术标签:

【中文标题】阻止 ListBox 使用内容而不是窗口来调整大小【英文标题】:Stop ListBox from resizing with content but not with window 【发布时间】:2021-04-17 08:57:04 【问题描述】:

我的代码中有一个ListBox,它在创建时将其窗口大小调整为其内容的高度,并且不显示它的滚动条,我希望窗口以指定的大小 301*287 开始。如果我将窗口的大小调整得更小,那么ListBox 的内容会超过它的高度并出现滚动条,这就是我想要的,但我不想在每次创建窗口时都调整它的大小来实现这一点。我已经尝试了this question 中的答案,但它们似乎都不起作用。

简而言之,ListBox 在创建时应根据 301*287 窗口上的网格定义调整大小,但不会,而是根据内容的高度调整自身大小,并使窗口的高度大于应有的高度。

<Window x:Class="Test.Dialogs.DatatypesDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test.Dialogs"
        mc:Ignorable="d"
        Title="DatatypesDialog" Width="301" Height="287" Background="Black" SizeToContent="WidthAndHeight" MinWidth="301" MinHeight="287" WindowStartupLocation="CenterOwner">
    <Grid Margin="0" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <ListBox Grid.Column="0" x:Name="lbDTypes" Margin="10,10,5,10" SelectionMode="Single" SelectionChanged="lbDTypes_SelectionChanged"/>
        <Grid Grid.Column="1" Margin="0,8,5,8" >
            <Grid.RowDefinitions>
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
                <RowDefinition Height="1*" />
            </Grid.RowDefinitions>
            <TextBox Grid.Row="0" x:Name="tbDType" Margin="5,2,5,2" TextWrapping="Wrap" Text="" />
            <Button Grid.Row="1" Margin="5,2,5,2" Content="New" Click="NewDType"   />
            <Button Grid.Row="2" Margin="5,2,5,2" Content="Modify" Click="EditDType"/>
            <Button Grid.Row="3" Margin="5,2,5,2" Content="Remove" Click="RemoveDType"/>
            <Separator Grid.Row="4" Margin="5,2,5,2"  />
            <Button Grid.Row="5" Margin="5,2,5,2" Content="Move Up" Click="MoveUpDType"  />
            <Button Grid.Row="6" Margin="5,2,5,2" Content="Move Down" Click="MoveDownDType" />
            <Separator Grid.Row="7" Margin="5,2,5,2" />
            <Button Grid.Row="8" Margin="5,2,5,2" Content="Save" Click="Save"/>
            <Button Grid.Row="9" Margin="5,2,5,2" Content="Close" Click="Close"/>
        </Grid>
    </Grid>
</Window>

【问题讨论】:

【参考方案1】:

SizeToContent="WidthAndHeight" 属性负责此行为。删除该属性或将其设置为另一个值("Manual""Width"),窗口不应再适应列表框。

【讨论】:

以上是关于阻止 ListBox 使用内容而不是窗口来调整大小的主要内容,如果未能解决你的问题,请参考以下文章

我想阻止我的浏览器无法调整大小

tkinter笔记002-防止窗口大小调整

使用菜单调整窗口大小

WPF:如何在调整大小后保持 ListBox SelectedItem 可见?

动态调整 pixi 舞台的大小及其在窗口调整大小和窗口加载时的内容

如何实现控件随对话框大小变化而自动调整大小和位置