Wpf 如何确保ListView显示完整的项目
我一直在遵循一些指导原则,以及如何完全显示ListView项,但它并没有像预期的那样工作。为了演示,我创建了一个非常简单的示例: XAML: 代码隐藏:Wpf 如何确保ListView显示完整的项目,wpf,listview,scrollviewer,Wpf,Listview,Scrollviewer,我一直在遵循一些指导原则,以及如何完全显示ListView项,但它并没有像预期的那样工作。为了演示,我创建了一个非常简单的示例: XAML: 代码隐藏: using System.Windows; using System.Windows.Input; namespace WpfApp { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> publ
using System.Windows;
using System.Windows.Input;
namespace WpfApp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void textBox_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
popup.IsOpen = true;
}
}
}
此应用程序在启动时显示如下文本框:
单击文本框时,弹出窗口将打开,并显示包含5个可见项的ListView:
现在,正如您所看到的,中间的项目并没有完全覆盖文本框中的5,这正是我想要的。还请注意,列表中最后5项下的空格并没有达到应有的大小
ListView的高度是ListViewItem和文本框高度5*30=150的倍数,据我所知,这应该是正确的高度
有谁能告诉我我做错了什么/遗漏了什么-这样列表视图的中间5正好覆盖了文本框中的5吗?wpf文本框有一些填充,为字母“g”提供了空间对不起,不知道基线以下这些额外像素的正确术语:- 因此,您可以尝试调整文本框的填充,如下所示: 这些条目是否需要编辑?如果不是,请使用垂直对齐=中心的文本块。这应该会变得更好 您也可以在样式中定义ListViewItem的datatemplate,我认为默认情况下它是ContentPresenter,将其转换为TextBox应该直接呈现在上面 当显示ListView时,我会关闭文本框的可见性。由于中间项可能是“6”。。。如果我是对的,您正在为值构建一些滚动选择器 编辑: 经过一些测试后,ListView/ListBox控件实现了一些内部填充。除非你完全想重新设计它们的样式,否则你最好的办法就是设置
HorizontalOffset=" -2"
VerticalOffset="-2"
弹出控件的。。。或者根据需要。粗俗的?肯定是:
我想您也会在生产代码中使用一些数据绑定,现在这只是一个设计测试:但问题在于ListView和ListViewItem,而不是文本框?我可以做一些技巧让它变得更好是的,但最后,我真的需要让ListView中的中间5正好超过文本框中的5。并且还了解了如何/为什么:顺便说一句,刚刚尝试为ListViewItem放置一个包含TextBlock的ContentTemplate。不幸的是,它与我的原始版本100%相同。我想这可能是解决方案。但正如你所说,这是一种刻薄。例如,在我的屏幕上,偏移量必须为-3。我将等待,看看是否有其他人有一个既简单又成熟的解决方案。谢谢你的帮助,真的很感激@werner值-2,-2是使用TextBlock作为模板生成的。在文本框中,这是0,-3,与您的情况相同,因此这与屏幕资源或类似问题无关,结果超出了您使用的控制范围。但还是有股股股股股的味道。正如我所说,您可以重新设计ListView的ItemPanel,这可能是真正的解决方案是的,实际上它似乎在不同的设备上工作。做得好,谢谢。
HorizontalOffset=" -2"
VerticalOffset="-2"