Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何获得所需的列表框高度,使其不会';我没有滚动条,它的内容适合那里_Wpf - Fatal编程技术网

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我已经更新了我的答案。希望对你有帮助。