如何从 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中的listview中的Columnheader和Data行之间删除分隔符边框行