我在WPF项目中遇到ListView / GridView组合的布局问题。列标题只是不跨越父ListView的整个宽度。我试图在各处找到文档,但是没有找到有关基础容器/控件模板的任何线索。
我猜标题的标准控件模板包含一些我不关心的东西,我只是无法将其包裹住。
(简化的)ListView在包含标头的行的左侧和右侧有一些像素空间,在此可见父ListView的背景:
https://i.imgur.com/XijV88a.jpg
问题:如何使列标题跨过ListView的整个宽度并使几个像素空间消失?
我的XAML:
<ListView Padding="0"
BorderThickness="0"
Background="Red">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Background" Value="LightGray" />
<Setter Property="Margin" Value="0" />
<Setter Property="Padding" Value="0" />
<Setter Property="BorderThickness" Value="0" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="Black" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Margin" Value="0" />
<Setter Property="Padding" Value="0" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
</Style>
</GridView.ColumnHeaderContainerStyle>
<GridViewColumn Header="1" Width="40"/>
<GridViewColumn Header="2" Width="40"/>
<GridViewColumn Header="3" Width="40"/>
</GridView>
</ListView.View>
<ListViewItem> 1 </ListViewItem>
<ListViewItem> 2 </ListViewItem>
</ListView>
到目前为止,实现我想要的外观的唯一方法是将listview的背景更改为与标题相同的颜色-不过,必须有更好的方法。任何帮助表示赞赏!
答案 0 :(得分:0)
此列不支持将“ *”作为宽度参数,因此您不能轻易地说出-填充其余部分...
您应该做的是挂接到ListView的SizeChanged事件,然后进行计算。因此,例如,在您的情况下,如果我们希望前两列各取40,而第三列取其余,您可以这样做:
private void ListView_SizeChanged(object sender, SizeChangedEventArgs e)
{
ListView listView = sender as ListView;
GridView gView = listView.View as GridView;
var workingWidth = listView.ActualWidth - SystemParameters.VerticalScrollBarWidth;
gView.Columns[0].Width = 40;
gView.Columns[1].Width = 40;
gView.Columns[2].Width = workingWidth - 80;
}
编辑
对于标题行中的间隙(左侧和右侧),您需要像这样更改ColumnHeaderContainerStyle:
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Foreground" Value="White" />
<Setter Property="Background" Value="Black" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Margin" Value="-2,0,-2,0" />
<Setter Property="Padding" Value="0" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
</Style>
</GridView.ColumnHeaderContainerStyle>
因此,请确保只将每边的空白减少2。