Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
C# 如何使ListView的项目占据所有可用高度?_C#_Wpf_Xaml - Fatal编程技术网

C# 如何使ListView的项目占据所有可用高度?

C# 如何使ListView的项目占据所有可用高度?,c#,wpf,xaml,C#,Wpf,Xaml,我正在尝试使用WPF制作柱状图。对于Y轴,我有一个要在控件上显示的值列表 我有一个绑定到集合的ListView。我怎样才能让项目分布在列表视图的整个长度上,而不是在顶部挤在一起?ListView是用于此操作的正确控件吗 以下是我的Xaml示例: <ListView Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" ItemsSource="{Binding YAxisValues}" Background

我正在尝试使用WPF制作柱状图。对于Y轴,我有一个要在控件上显示的值列表

我有一个绑定到集合的ListView。我怎样才能让项目分布在列表视图的整个长度上,而不是在顶部挤在一起?ListView是用于此操作的正确控件吗

以下是我的Xaml示例:

<ListView Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" 
          ItemsSource="{Binding YAxisValues}" 
          Background="Gray" VerticalContentAlignment="Stretch">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Label Content="{Binding Path=Value}" 
                       Foreground="White" 
                       HorizontalAlignment="Left" 
                       FontSize="12" Width="50"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
左边是我目前拥有的列表视图。 右边是我想要的结果

如何更改我的ListView以到达那里?还是我需要使用完全不同的控件

将项目的HorizontalContentAlignment设置为拉伸

       <ListView>
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>

使用UniformGrid作为项spanel项获得相等高度

<ListView Name="Axis" Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" 
        ItemsSource="{Binding YAxisValues}"
        Background="Gray" VerticalContentAlignment="Stretch"              
        ScrollViewer.VerticalScrollBarVisibility="Disabled">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="1"/>
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <!--no changes-->
    </ListView.ItemTemplate>
</ListView>

当ListView没有足够的高度容纳所有元素时,可能会出现问题。在这种情况下,我会将ListView放入ViewBox

尝试将标签包装在一个ViewBox中,如下所示:@NorbertKovacs我担心它似乎不会改变结果。@Timmoth,另一个想法:ListView允许从列表中选择项目。如果您不需要选择,ItemsControl而不是ListView应该可以使用相同的顺序。我希望这些项目在垂直方向上占据尽可能多的空间。但就我所见,这个解决方案似乎并没有改变它。即使在设置VerticalContentAlignment时,如果您将其更改为VerticalContentAlignment,然后将ListView.ItemsPanel更改为UniformGrid,也应该可以修复它,这基本上是ASh的答案。区别在于,在ListView本身或其ListView.ItemContainerStyle.Perfect上设置VerticalContentAlignment并不重要!正是我需要的。在我的例子中,如果没有足够的项来填充列表框的空间,那么UniformGrid将使这些项能够共享额外的空间。如果有足够的项目显示滚动条,则每个项目的高度将达到所需的最小高度。荣誉