2017-03-15 121 views
0

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

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

<Style TargetType="ContentPresenter">           
    <Setter Property="Margin" Value="-5"/> 

回答

1

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

您可以设置DataGridTemplateColumnHeaderStyleDataGridColumnHeader风格切缘阴性:

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

我还纳闷,为什么没有背景颜色(的ItemsControl = LightBlue,帆布=粉黄)是可见的,但我想这是相同的原因。

尝试指定Height作为Canvas。 ItemsControl的背景“隐藏”在ItemsPanel后面。但请提供回购,如果你的东东任何进一步的帮助:https://stackoverflow.com/help/mcve

编辑:正如你已经注意到了,你也可以尝试设置MarginContentPresenter的:

<Style TargetType="ContentPresenter">           
    <Setter Property="Margin" Value="-5"/> 
</Style> 
+0

我更新了这个问题,因为它不起作用,但是你指出了我正确的方向 - 非常感谢。如果你更新了答案,我会接受它作为答案。 –

+0

我更新了答案。你在哪个版本的Windows上? – mm8

+0

我使用的是Windows 10.由于所有的客户端都运行在赢10上,所以我没有专注于此。这应该以某种方式考虑? –

0

尝试-5设置RowHeaderWidth="0",这是一个DataGrid属性。

//编辑 也许别的什么是干扰。 这里最重要的属性的链接风格你DataGridStyling Microsoft’s WPF datagrid

这里是一个简单的例子

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

without

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

with

正如你所看到的RowHeader不见了。

+0

不幸的是,不工作。 –

+0

我认为我的照片没有太好地显示问题。问题不在于如何摆脱rowheader,而不是如何格式化columnheader,所以现在控件的空间已经剩下了。在你的例子中,浅灰线和Zwei之间应该没有空格。 –

+0

哈哈,好的。我以为你只是想摆脱,如果黄色区域,我看起来像一个RowHeader;) –