Wpf 如何获得所需的列表框高度,使其不会';我没有滚动条,它的内容适合那里
我在Wpf 如何获得所需的列表框高度,使其不会';我没有滚动条,它的内容适合那里,wpf,Wpf,我在DockPanel中有一个ListBox。我想知道列表框的大小,这样它就没有滚动条了。我使用ListBox。DesiredSize但实际上DesiredSize等于ListBox。实际宽度/高度,ListBox有滚动条,因为有更多的项目可以适合其高度。 如何获得所需的实际大小?如果您想在列表框中去掉滚动条,而不是在wpf应用程序中创建静态高度,可以禁用滚动条属性 在XAML中: <ListBox ScrollViewer.HorizontalScrollBarVisibility="D
DockPanel
中有一个ListBox
。我想知道列表框的大小,这样它就没有滚动条了。我使用ListBox。DesiredSize
但实际上DesiredSize
等于ListBox。实际宽度
/高度
,ListBox
有滚动条,因为有更多的项目可以适合其高度。
如何获得所需的实际大小?如果您想在列表框中去掉滚动条,而不是在wpf应用程序中创建静态高度,可以禁用滚动条属性
在XAML中:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" />
myListBox.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
myListBox.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
您可以禁用滚动条
或其他
VerticalScrollBarVisibility="Auto"
并为列表框滚动条设置任何高度,只有内容达到其最大列表框高度时,滚动条才会可见
或
通过以下XAML将ListBox height属性绑定到LayoutRoot网格的实际高度,尝试实现所需高度:
<Grid x:Name="LayoutRoot" Background="LightGray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".24*"/>
<ColumnDefinition Width=".73*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height=".9*"/>
<RowDefinition Height=".1*"/>
</Grid.RowDefinitions>
<ListBox Name="Subdivisions" SelectedItem="{Binding SelectedSubdivisionViewModel}" ItemsSource="{Binding Path=Subdivisions}" Grid.IsSharedSizeScope="True" Height="{Binding ElementName=LayoutRoot, Path=ActualHeight}" >
也可通过祖先类型实现:
Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}"
这是我的工作代码,您可以将其从网格更改为Dockpanel
若您想在列表框中去掉滚动条而不是在wpf应用程序中创建静态高度,可以禁用滚动条属性
在XAML中:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" />
<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" />
myListBox.SetValue(ScrollViewer.HorizontalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
myListBox.SetValue(ScrollViewer.VerticalScrollBarVisibilityProperty, ScrollBarVisibility.Disabled);
您可以禁用滚动条
或其他
VerticalScrollBarVisibility="Auto"
并为列表框滚动条设置任何高度,只有内容达到其最大列表框高度时,滚动条才会可见
或
通过以下XAML将ListBox height属性绑定到LayoutRoot网格的实际高度,尝试实现所需高度:
<Grid x:Name="LayoutRoot" Background="LightGray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".24*"/>
<ColumnDefinition Width=".73*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height=".9*"/>
<RowDefinition Height=".1*"/>
</Grid.RowDefinitions>
<ListBox Name="Subdivisions" SelectedItem="{Binding SelectedSubdivisionViewModel}" ItemsSource="{Binding Path=Subdivisions}" Grid.IsSharedSizeScope="True" Height="{Binding ElementName=LayoutRoot, Path=ActualHeight}" >
也可通过祖先类型实现:
Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}}"
这是我的工作代码,您可以将其从网格更改为Dockpanel
如何获得真正想要的尺寸
如果未明确设置其高度
或垂直对齐
属性,并避免将其放置在面板
中,以无限空间(如堆栈面板
)测量其子级,则会自动计算列表框
的所需大小
然而,ListBox
本身的所需大小与所有ListBoxItem
容器的聚合大小不同。事实上,没有简单的方法精确计算这个高度,因为如果您没有禁用列表框的UI虚拟化,那么并非所有容器都是预先生成的
最简单的解决方法/解决方案可能是在加载列表框后获得第一个容器的高度,然后将该值与实际项目数相乘,例如:
<ListBox x:Name="lb" Loaded="lb_Loaded">
<ListBoxItem>1</ListBoxItem>
<ListBoxItem>2</ListBoxItem>
<ListBoxItem>3</ListBoxItem>
</ListBox>
如何获得真正想要的尺寸
如果未明确设置其高度
或垂直对齐
属性,并避免将其放置在面板
中,以无限空间(如堆栈面板
)测量其子级,则会自动计算列表框
的所需大小
然而,ListBox
本身的所需大小与所有ListBoxItem
容器的聚合大小不同。事实上,没有简单的方法精确计算这个高度,因为如果您没有禁用列表框的UI虚拟化,那么并非所有容器都是预先生成的
最简单的解决方法/解决方案可能是在加载列表框后获得第一个容器的高度,然后将该值与实际项目数相乘,例如:
<ListBox x:Name="lb" Loaded="lb_Loaded">
<ListBoxItem>1</ListBoxItem>
<ListBoxItem>2</ListBoxItem>
<ListBoxItem>3</ListBoxItem>
</ListBox>
谢谢,但我想调整列表框的大小,这样就不需要滚动条了,这样它就适合所有项目。我澄清了我的问题。@Bohus我已经更新了我的答案。希望它能对你有所帮助。谢谢,但我想调整列表框的大小,这样就不需要滚动条了,这样它就适合所有的项目。我澄清了我的问题。@Bohus我已经更新了我的答案。希望对你有帮助。