WPF:ScrollViewer比ListView小4px

时间:2013-07-24 10:54:51

标签: wpf listview scrollviewer pixels

我遇到了一个非常奇怪的功能" ListView。希望有人可以帮助我。

在Window上创建ListView时,它会在边框和内容之间加上默认的间距。如果你看一下Snoop的信息,我猜它是2(左和右)的填充。 ListBoxChrome(ListView的一部分)在我的情况下是363px宽。其中的ScrollViewer是359px。这些控件都没有设置任何内容。即使是一个带有简单ListView的新项目也存在这个问题。

一种解决方法是给标题单元格填充-2,但由于某种原因,标题不会填充到右边,并在右边留下更大的间隙。

有人在这帮助我吗?

一些截图:

http://i.imgur.com/AKbDfwQ.png

http://i.imgur.com/pQtqMJ4.png

1 个答案:

答案 0 :(得分:0)

来自BorderThickness元素的PaddingBorder的组合(每个元素左起2px.1px,右起1px)。

您可以设置

<ListView BorderThickness="0">

并且松散的2px,但Windows-8上的至少Padding直接设置在默认模板中的Border控件上,如果直接在ListView上设置,则不会产生任何影响/ p>

Style

的默认ListView中提取
<ControlTemplate TargetType="{x:Type ListView}">
  <Border x:Name="Bd"
          Background="{TemplateBinding Background}"
          BorderBrush="{TemplateBinding BorderBrush}"
          BorderThickness="{TemplateBinding BorderThickness}"
          Padding="1"
          SnapsToDevicePixels="true">

最简单的选项是提供自定义Style,您可以将Padding值调整为0.您还可以选择使用Behavior并获取对Border控件的引用并覆盖代码中的填充。 / p>

如果您选择代码隐藏选项来覆盖Padding,则设置填充的粗略方法可能如下:

public MainWindow()
{
  InitializeComponent();
  Loaded += (sender, args) => {
    var border = (Border)lv.Template.FindName("Bd", lv);
    border.Padding = new Thickness(0);
  };
}

和你的xaml:

<ListView x:Name="lv"
          BorderThickness="0">