在DataGrid ColumnHeader中格式化边距/填充

时间:2017-03-15 19:13:30

标签: wpf xaml

我想在数据网格的列标题中放置一个画布,它与列的最左边对齐,即列和控件之间没有边距。但是,列和控件之间总是有一些空间。我想知道如何摆脱图片中显示的黄色小空间?我也想知道,为什么没有背景颜色(ItemsControl = LightBlue,Canvas = LemonChiffon)可见,但我想这也是同样的原因。

enter image description here

所需的设计如下所示:

enter image description here

这是我的代码:

<Grid DataContext="{StaticResource vmJp}">
    <DataGrid  x:Name="dgProj" AutoGenerateColumns="False" IsReadOnly="True"  CanUserAddRows="False" Margin="10" ItemsSource="{Binding Baustellen}" BorderThickness="0" HeadersVisibility="Column" Padding="0">
        <DataGrid.Columns>
         ....

            <DataGridTemplateColumn Width="1*" x:Name="coPlanung">
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <ItemsControl ItemsSource="{Binding DataContext.Monate, ElementName=dgProj}" Margin="0" VerticalAlignment="Center" Background="LightBlue">
                            <ItemsControl.ItemContainerStyle>
                                <Style TargetType="ContentPresenter">
                                    <Setter Property="Canvas.Left">
                                        <Setter.Value>
                                            <MultiBinding Converter="{StaticResource d2x}">
                                                <Binding Path="Date" Mode="OneWay" />
                                                <Binding Path="ActualWidth" ElementName="coPlanung" Mode="OneWay"/>
                                            </MultiBinding>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </ItemsControl.ItemContainerStyle>
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <Canvas Width="{Binding ActualWidth, ElementName=coPlanung}" Margin="0" Background="LemonChiffon"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <!--Monthnames-->
                                    <TextBox Text="{Binding Path=Date, StringFormat={}{0:MMM-yyyy}, Mode=OneWay}" HorizontalAlignment="Center" VerticalAlignment="Center" Background="Transparent" Margin="0">
                                        <TextBox.Width>
                                            <MultiBinding Converter="{StaticResource d2b}">
                                                <Binding Path="Date" Mode="OneWay" />
                                                <Binding Path="ActualWidth" ElementName="coPlanung" Mode="OneWay"/>
                                            </MultiBinding>
                                        </TextBox.Width>
                                    </TextBox>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>

将边距设置为-5并未显示所需的设计:

enter image description here

代码

<DataGridTemplateColumn x:Name="coPlanung">
    <DataGridTemplateColumn.HeaderStyle>
        <Style TargetType="DataGridColumnHeader">
            <Setter Property="Padding" Value="0"/>
            <Setter Property="Margin" Value="-5"/>
        </Style>
    </DataGridTemplateColumn.HeaderStyle>
    <DataGridTemplateColumn.HeaderTemplate>
    ...

解决方案:ContentPresenter

中将保证金设置为-5
<Style TargetType="ContentPresenter">                                        
    <Setter Property="Margin" Value="-5"/>

2 个答案:

答案 0 :(得分:2)

  

我想知道如何摆脱图片中显示的黄色小空间?

您可以将HeaderStyle的{​​{1}}设置为带有负边距的DataGridTemplateColumn样式:

DataGridColumnHeader
  

我也很想知道,为什么背景颜色(ItemsControl = LightBlue,Canvas = LemonChiffon)都不可见,但我想这也是同样的原因。

尝试为<DataGridTemplateColumn x:Name="coPlanung"> <DataGridTemplateColumn.HeaderStyle> <Style TargetType="DataGridColumnHeader"> <Setter Property="Padding" Value="0"/> <Setter Property="Margin" Value="-5"/> </Style> </DataGridTemplateColumn.HeaderStyle> <DataGridTemplateColumn.HeaderTemplate> ... 指定Height。 ItemsControl的背景是&#34;隐藏&#34;在Canvas之后。但如果您需要任何进一步的帮助,请提供回购:https://stackoverflow.com/help/mcve

修改:您已经注意到,您也可以尝试设置ItemsPanel的{​​{1}}:

Margin

答案 1 :(得分:0)

尝试设置RowHeaderWidth="0",它是DataGrid属性。

//编辑 也许其他东西在干扰。 以下是用于设置DataGridStyling Microsoft’s WPF datagrid

样式的最重要属性的链接

这是一个简短的例子

<DataGrid ItemsSource="{Binding ViewModels}" />

without

<DataGrid ItemsSource="{Binding ViewModels}"
          RowHeaderWidth="0"/>

with

正如您所见,RowHeader已消失。