Wpf 如何确保ListView显示完整的项目

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

我一直在遵循一些指导原则,以及如何完全显示ListView项,但它并没有像预期的那样工作。为了演示,我创建了一个非常简单的示例:

XAML:

代码隐藏:

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"