【发布时间】: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放到问题里了,所以你可以正式“回答”,我可以把你的回答标记为答案,你就得分了:)
标签: wpf xaml wpftoolkit