c# - ListView 下方的 WPF 按钮 - 当 ListView 太大时消失
问题描述
我有一个 ListView,用户可以在其中添加文件。ListView 下方有两个按钮,用于添加单个文件或整个文件目录。代码结构与此类似:
<StackPanel>
<ListView>...</ListView>
<StackPanel>
<Button Content="Add Scan"/>
<Button Content="Add mulit"/>
</StackPanel>
</StackPanel>
在文件数量超过可用空间之前,这很好用:
但是,当文件多于可用空间时,TreeView 会出现一个滚动条,但带有按钮的堆栈面板会消失:
我猜问题是包含 TreeView 和其他 StackPanel 的 StackPanel 允许子元素增长到可用大小之外。如果我用网格替换 StackPanel,当文件很多时,我会得到所需的行为,但是当文件较少(或根本没有文件)时,按钮会卡在底部:
关于我可以使用哪种面板组合让带有两个按钮的 StackPanel 位于 TreeView 正下方的任何想法,除非 TreeView 占用所有空间,在这种情况下,我希望按钮在窗口底部可见,并且TreeView 有一个滚动条。
解决方案
如果您不想占用列表/树下方的整个空间,请尝试以下操作:
<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();
}
}
}
推荐阅读
- python - 返回任何 JSON 的 pyspark UDF 的返回类型
- java - 如何动态开始工作
- python-3.x - 如何匹配最近出现的模式
- sql - 如何使用 SQL Oracle 访问 varray 中的元素
- web - 如何在 actix-web 中定义 URL 参数?
- python - python - 为什么在python中使用pickle编码和解码后列表会发生变化?
- python - 仅从第一页提取的数据保存在 csv 文件中(Scrapy、Selenium)
- java - DecimalFormatSymbols 具有非正统语言环境的意外区域特定值
- html - Puppeteer 没有填写输入元素/错误的选择器?
- git - 有没有办法在主分支上切换已提交更改的分支?