【问题标题】:Get rid of a 1 pixel padding/border gap in a ListView?摆脱 ListView 中的 1 像素填充/边框间隙?
【发布时间】:2011-08-11 14:31:06
【问题描述】:

看看这个!

我真的需要摆脱这个!
看看声明!

<ListView Name="list" BorderThickness="0">

我该如何解决?
这种差距不仅发生在滚动条上,也发生在项目上,无论是否有任何视图。

【问题讨论】:

  • 边框大概在滚动条周围;使用 Snoop 调查应该实际设置哪个属性:blois.us/Snoop
  • 不不不,边框也在物品周围!但无论如何,我会用 Snoop 尝试一两件事......
  • 评论大多赞成使用Snoop;它在进行 WPF 开发时非常宝贵。
  • 根本不起作用。我选择进程,然后单击按钮,2 分钟或 100 次单击后没有任何反应。
  • 你打开 snoop,查看选择进程,按“Snoop this application”按钮,会弹出一个窗口。只需按住 Ctrl + Shift 将鼠标悬停在您的应用程序中,它将选择其下的 WPF 控件并将其显示在 snoop 树检查器上。

标签: c# wpf xaml listview styles


【解决方案1】:

看起来像Template 中的一个问题,很可能是内部控件的属性,该属性未绑定到 ListBox 向您公开的任何属性。

Vercas 编辑:我发现了问题。
这是ListView的模板:

<ControlTemplate x:Key="ListView" TargetType="ListBox">
    <Border Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="{TemplateBinding Control.BorderThickness}" Name="Bd" Padding="1" SnapsToDevicePixels="True">
        <ScrollViewer Focusable="False" Padding="{TemplateBinding Control.Padding}">
            <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
        </ScrollViewer>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="UIElement.IsEnabled" Value="False">
            <Setter Property="Border.Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
        </Trigger>
        <Trigger Property="ItemsControl.IsGrouping" Value="True">
            <Setter Property="ScrollViewer.CanContentScroll" Value="False" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

只需将边框的 Padding 更改为 0 即可。
如果您不想费心寻找房产,这就是结果。

<ControlTemplate x:Key="ListView" TargetType="ListBox">
    <Border Background="{TemplateBinding Control.Background}" BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="{TemplateBinding Control.BorderThickness}" Name="Bd" Padding="0" SnapsToDevicePixels="True">
        <ScrollViewer Focusable="False" Padding="{TemplateBinding Control.Padding}">
            <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
        </ScrollViewer>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="UIElement.IsEnabled" Value="False">
            <Setter Property="Border.Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
        </Trigger>
        <Trigger Property="ItemsControl.IsGrouping" Value="True">
            <Setter Property="ScrollViewer.CanContentScroll" Value="False" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>

不要忘记将此模板添加到您的ListView

【讨论】:

  • 问题不在我的模板中,因为我消除了它们并且问题仍然存在。如果不是我的问题,我该如何解决? O_O
  • @Vercas:你不能消除模板,总会有一些模板。
  • 是的,它在模板中。让我把它添加到你的答案中。编辑:我的意思是我删除了基于原始模板的自己的模板。
【解决方案2】:

如果你有它,这将更容易在 Blend 中修复。如果没有,可以免费试用。您必须为您在该列表中使用的滚动查看器生成控制模板的副本。从那里您可以编辑 ScrollBar 的模板。

一旦你接触到滚动条模板,它就会有好几级模板的深度。 ListView 模板>ItemsPresenter(在本例中为 Wrap Panel)模板> ScrollViewer 模板> ScrollBar 模板。

【讨论】:

  • ScrollBar 不是问题,是整个 ListView! ListView 中有 1 个像素的内边距!
猜你喜欢
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多