如何从 WPF 中的 ListBox 中删除边框?

Posted

技术标签:

【中文标题】如何从 WPF 中的 ListBox 中删除边框?【英文标题】:How to remove border from ListBox in WPF? 【发布时间】:2021-06-26 09:48:28 【问题描述】:

这是我的代码:

<Grid>
    <ScrollViewer Grid.Row="0" Grid.Column="1" HorizontalScrollBarVisibility="Disabled">
        <StackPanel Orientation="Vertical">
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                <TextBox MinWidth="80" Name="tbTodoName" Margin="5, 2"/>
                <Button Content="Add" Height="30" Margin="5, 0"/>
            </StackPanel>
            <ListBox Name="lstTodo" ItemsSource="Binding" BorderThickness="0" Padding="0" ItemTemplate="StaticResource TodoTemplate" ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch">
            </ListBox>
        </StackPanel>
    </ScrollViewer>
</Grid>

这是程序外观的图片:

从图中可以看出,ListBox 周围显示了一个框架。我不明白为什么,因为我设置了 BorderThickness 和 Padding = "0"。

有人可以帮我吗?

【问题讨论】:

【参考方案1】:

您已经设置了一个自定义的 ItemTemplate,它只应用于项目。

您还需要应用模板:

    <Grid>
        <ScrollViewer Grid.Row="0" Grid.Column="1" HorizontalScrollBarVisibility="Disabled">
            <StackPanel Orientation="Vertical">
                <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                    <TextBox MinWidth="80" Name="tbTodoName" Margin="5, 2"/>
                    <Button Content="Add" Height="30" Margin="5, 0"/>
                </StackPanel>
                <ListBox Name="lstTodo" ItemsSource="Binding" BorderThickness="0" Padding="0" ItemTemplate="StaticResource TodoTemplate" Template=StaticResource ListBoxNoBorder 
ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch">
                </ListBox>
            </StackPanel>
        </ScrollViewer>
    </Grid>

在您的资源字典中:

<ControlTemplate x:Key="ListBoxNoBorder" TargetType="x:Type ListBox">
    <Border BorderBrush="Transparent" BorderThickness="0">
        <ItemsPresenter SnapsToDevicePixels="TemplateBinding SnapsToDevicePixels"/>
    </Border>
</ControlTemplate>

【讨论】:

ControlTemplate 中的Border 甚至都不需要,直接把ItemsPresenter 放进去即可。

以上是关于如何从 WPF 中的 ListBox 中删除边框?的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何删除选定ListBox项目周围的边框?

从WPF ListBox中的单个列表中显示多个类型?

如何在WPF中的listview中的Columnheader和Data行之间删除分隔符边框行

WPF ListBox - 如何从数据表中输入值?

WPF开发为按钮提供添加,删除和重新排列ListBox内容的功能

如何在 WPF 中的 ListBox 上添加标签?