WPF问题中的垂直大小调整
Posted
技术标签:
【中文标题】WPF问题中的垂直大小调整【英文标题】:Vertical sizing in WPF trouble 【发布时间】:2014-07-06 13:39:17 【问题描述】:我在垂直调整 https://wpftoolkit.codeplex.com/ 的 CheckListBox 控件时遇到了问题。我是 WPF 一周大的新手,所以这可能是(垂直)大小调整的一般问题。
考虑到我的网格,我希望前 5 行的大小可以随意调整,在我的视口中,我希望第 6 行中的 CheckListBox 控件可以简单地垂直填充剩余空间。
我的问题是,当我用很多元素填充 CheckListBox 时,控件只会扩展/溢出视口。我想要它做的是垂直假设剩余空间的高度,这将使它显示一个内部滚动条。
<Grid Grid.Column="0">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Row="0">Some title</Label>
<RadioButton Grid.Row="1" GroupName="NameSortRadioButtonGroup">Firstname Lastname</RadioButton>
<RadioButton Grid.Row="2" GroupName="NameSortRadioButtonGroup">Lastname, Firstname</RadioButton>
<TextBox Grid.Row="3" Margin="0,5" />
<Label Grid.Row="4" Content="Binding ElementName=MyCheckListBox, Path=SelectedItems.Count" />
<xctk:CheckListBox
Grid.Row="5"
Name="MyCheckListBox"
VerticalAlignment="Stretch"
VerticalContentAlignment="Stretch"
Height="Auto"
/>
</Grid>
为了简化,我省略了一些父元素。 Grid 在网格中,在画布中,在网格中,并且这个外部网格是 Window 元素的直接子元素。
我已尝试将 CheckListBox 控件包装在 StackPanel 中,使用 Height="Auto"(以消除 CheckListBox 中出现错误的可能性),并在此处设置 CheckListBox 的高度使用
Height="Binding ElementName=CheckListBoxStackPanelWrapper, Path=ActualHeight"
我最初也尝试使用 StackPanel 和后来的 DockPanel 而不是 Grid 控件来完成整个操作。
在所有情况下,CheckListBox 只是从窗口/视口中流出。如果我给它一个明确的高度,它的行为是正确的,但我显然希望我的窗口可以调整大小。
我该怎么办?
【问题讨论】:
这个Grid
是直接在您的Window
中还是其他一些控件的一部分?
还有更多的东西 - 它在网格中,在网格中,在画布中。这个画布的大小是“内容区域”,实际上就是我所说的视口。
Canvas
是问题所在。来自MSDN:Canvas 的子元素总是被赋予他们想要的完整大小。因此,您的Grid
将获得所需的空间
我的好人,你是对的!谢谢。可悲的是,画布在那里只是因为我在乱搞学习控件。我已经把canvas-part放到问题里了,所以你可以正式“回答”,我可以把你的回答标记为答案,你就得分了:)
【参考方案1】:
总结 cmets 因为你的外部控件是一个Canvas
,它不限制它的子元素来自MSDN:
Canvas 的子元素总是被赋予他们想要的完整尺寸
这意味着Grid
将获得所需的空间。一种解决方案是删除Canvas
部分或限制Grid
的大小或扩展行
【讨论】:
谢谢。我移除了外部画布,总体上减少了嵌套,现在网格正确地限制了流动。以上是关于WPF问题中的垂直大小调整的主要内容,如果未能解决你的问题,请参考以下文章
WPF:如何在弹出窗口中自动调整 WebBrowser 的大小?