【问题标题】:How to remove border from ListBox in WPF?如何从 WPF 中的 ListBox 中删除边框?
【发布时间】: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"。

有人可以帮我吗?

【问题讨论】:

    标签: wpf listbox styles border


    【解决方案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 放进去即可。
    猜你喜欢
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多