WPF - 列表视图项边距

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15747365/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 08:25:13  来源:igfitidea点击:

WPF - Listview Item Margin

c#wpfxaml

提问by Faris Zacina

My Listview items are not stretching to the full width of the column. There is always a margin on the right of my cell border. I would like to get the bordered area to stretch over the full column width and get rid of any padding, margins or anything else on the left and right of my content. The goal is to have the borders fill the whole space in each cell.

我的 Listview 项目没有拉伸到列的整个宽度。我的单元格边框右侧总是有一个边距。我想让带边框的区域在整个列宽上伸展,并去除内容左右两侧的任何填充、边距或任何其他内容。目标是让边框填满每个单元格中的整个空间。

I have already applied stretching and set the margins to "-6,0,-6,0" but that doesn't seem to solve the problem.

我已经应用了拉伸并将边距设置为“-6,0,-6,0”,但这似乎并没有解决问题。

Here is my code:

这是我的代码:

  <Grid>
            <Grid.Resources>
                <x:Array Type="{x:Type sys:String}" x:Key="items">
                    <sys:String>Foo</sys:String>
                    <sys:String>Bar</sys:String>
                    <sys:String>Spong</sys:String>
                </x:Array>
            </Grid.Resources>

            <ListView ItemsSource="{StaticResource items}">

                <ListView.ItemContainerStyle>
                    <Style TargetType="ListViewItem">
                        <Setter Property="Margin"
            Value="-6, 0,-6,0" />
                        <Setter Property="HorizontalAlignment" Value="Stretch" />
                        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                        <Setter Property="VerticalContentAlignment" Value="Stretch" />
                        <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
                    </Style>
                </ListView.ItemContainerStyle>

                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Data" Width="80">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <Border BorderThickness="2" BorderBrush="Black" HorizontalAlignment="Stretch">
                                        <TextBox Text="{Binding .}"  />
                                    </Border>

                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="Length"
         DisplayMemberBinding="{Binding Length}" />
                    </GridView>
                </ListView.View>
            </ListView>

        </Grid>

回答by d.moncada

I got it working using a DataTemplate resource and setting the border's margin to -6.

我使用 DataTemplate 资源使其工作并将边框的边距设置为 -6。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.Resources>
            <x:Array Type="{x:Type sys:String}" x:Key="items">
                <sys:String>Foo</sys:String>
                <sys:String>Bar</sys:String>
                <sys:String>Spong</sys:String>
            </x:Array>
            <DataTemplate x:Key="MyDataTemplate">
                <Border BorderThickness="2" BorderBrush="Black" Margin="-6">
                    <TextBox Text="{Binding .}" Margin="0" Padding="0"/>
                </Border>
            </DataTemplate>
        </Grid.Resources>
        <ListView ItemsSource="{StaticResource items}">
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
                </Style>
            </ListView.ItemContainerStyle>
            <ListView.View>
                <GridView >
                    <GridViewColumn Header="Data" Width="80" CellTemplate="{StaticResource MyDataTemplate}" />
                    <GridViewColumn Header="Length" DisplayMemberBinding="{Binding Length}" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

回答by Adolfo Perez

Just set the Margin for your Border element:

只需为您的边框元素设置边距:

            <Border Margin="-6,0,-6,0" BorderThickness="2" BorderBrush="Black" HorizontalAlignment="Stretch">
               <TextBox Text="{Binding .}"  />
            </Border>

回答by Mykhailo Pantia

Alternative solution

替代方案

typeof(GridViewRowPresenter).GetField("_defalutCellMargin", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.GetField).SetValue(null, new Thickness(0));

回答by Krzysztof Skowronek

I do it with

我这样做

HorizontalContentAlignment="Stretch"

on ListView

在列表视图上