ListView下面的WPF按钮 - 当ListView太大时消失

问题描述 投票:-1回答:1

我有一个ListView,用户可以在其中添加文件。 ListView下面有两个按钮,用于添加单个文件或整个文件目录。代码结构类似于:

<StackPanel>
    <ListView>...</ListView>
    <StackPanel>
        <Button Content="Add Scan"/>
        <Button Content="Add mulit"/>
    </StackPanel>
</StackPanel>

这很有效,直到文件数超过可用空间:

enter image description here

但是,当文件多于可用空间时,TreeView会显示滚动条,但带有按钮的堆栈面会消失:

enter image description here

我想问题是包含TreeView和其他StackPanel的StackPanel允许子元素在可用大小之外增长。如果我用网格替换StackPanel,当有很多文件时我会得到所需的行为,但是当文件较少(或根本没有文件)时,按钮会卡在底部:

enter image description here

我可以使用哪种面板组合来让StackPanel与两个按钮位于TreeView正下方,除非TreeView占用所有空间,在这种情况下我希望按钮在窗口底部可见,并且TreeView有一个滚动条。

c# wpf xaml
1个回答
2
投票

如果您不想占用列表/树下面的整个空间,请尝试以下操作:

<Grid Name="MainGrid">
    <Grid.Resources>
        <local:SubstractorConverter x:Key="SubstractorConverter"/>
    </Grid.Resources>
    <StackPanel>
        <ListView>
            <ListView.MaxHeight>
                <MultiBinding Converter="{StaticResource SubstractorConverter}">
                    <Binding Path="ActualHeight" ElementName="MainGrid" />
                    <Binding Path="ActualHeight" ElementName="Footer" />
                </MultiBinding>
            </ListView.MaxHeight>
        </ListView>
        <StackPanel Name="Footer">
            <Button Content="Add Scan"/>
            <Button Content="Add mulit"/>
        </StackPanel>
    </StackPanel>
</Grid>

这是转换器:

using System;
using System.Globalization;
using System.Linq;
using System.Windows.Data;

namespace TestWpf
{
    class SubstractorConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            var dbls = values.OfType<double>().ToArray();
            if (dbls.Length != 2)
                return null;

            return dbls[0] - dbls[1];
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.