C# WPF数据网格头模板

C# WPF数据网格头模板,c#,.net,wpf,datagrid,C#,.net,Wpf,Datagrid,我将一个带有图像的按钮放在DataGrid列的标题中。单元格模板也只是一个带有图像的简单按钮 <my:DataGridTemplateColumn> <my:DataGridTemplateColumn.HeaderTemplate> <DataTemplate> <Button ToolTip="Add New Template" Name="AddNewTemplate" Click="AddNewTe

我将一个带有图像的按钮放在DataGrid列的标题中。单元格模板也只是一个带有图像的简单按钮

<my:DataGridTemplateColumn>
    <my:DataGridTemplateColumn.HeaderTemplate>
        <DataTemplate>
            <Button ToolTip="Add New Template" Name="AddNewTemplate" Click="AddNewTemplate_Click">
                <Image Source="../Resources/add.png"/>
            </Button>
        </DataTemplate>
    </my:DataGridTemplateColumn.HeaderTemplate>
    <my:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button ToolTip="Edit Template" Name="EditTemplate" Click="EditTemplate_Click" Tag="{Binding}">
                <Image Source="../Resources/pencil.png"/>
            </Button>
        </DataTemplate>
   </my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>

渲染时,标题仅在右侧有大约10-15px的填充,这会导致单元格明显以该宽度渲染,使单元格按钮两侧都有空白。作为一个像素完美主义者,这让我非常恼火。我最初以为在排序时它是显示箭头的空间,但我在整个DataGrid和列上都禁用了排序

这是一张图片:

我假设这是从按钮的父元素填充的。有人知道消除它的方法吗


见:


解决方案:

<my:DataGrid.Resources>
    <Style x:Key="addHeader" TargetType="{x:Type myp:DataGridColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type myp:DataGridColumnHeader}">
                    <Button ToolTip="Add New Template" Name="AddNewTemplate" Click="AddNewTemplate_Click" Margin="4">
                        <Image Source="../Resources/add.png"/>
                    </Button>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</my:DataGrid.Resources>
<my:DataGrid.Columns>
    <my:DataGridTemplateColumn HeaderStyle="{StaticResource addHeader}">
        <my:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button ToolTip="Edit Template" Name="EditTemplate" Click="EditTemplate_Click" Tag="{Binding}">
                    <Image Source="../Resources/pencil.png"/>
                </Button>
            </DataTemplate>
        </my:DataGridTemplateColumn.CellTemplate>
    </my:DataGridTemplateColumn>
</my:DataGrid.Columns>

救命

现在,您更新了问题,我在中发现了一个有趣的代码:

其中DefaultPadding不是0。。。即使他们不使用标准的填充物,他们也会让孩子稍微移动一下


如何解决这个问题?也许为表头编写自己的模板就可以了。或者你可以尝试为图像设置负边距。这两种方法我都不喜欢。但是我还找不到更好的方法。

使用Padding=“0,0.000001,0,0”似乎可以绕过他们的检查代码并工作(至少在.NET 4.0中是这样)。

这让我看到它出现在持有
ContentPresenter
DataGridHeaderOrder
中(
按钮的父按钮)。没有任何属性指示填充的起始位置。啊。请看原始帖子中的截图。谢谢!解决方案张贴在上面。非常好:)!我很高兴你找到了它!干杯。我使用了
-我可以用.NET 4.5和Visual Studio 2017确认此解决方案。
   protected override Size ArrangeOverride(Size arrangeSize)
   {
     //...
     if (padding.Equals(new Thickness()))
     {
       padding = DefaultPadding;
     }
     //...
     child.Arrange(new Rect(padding.Left, padding.Top, childWidth, childHeight));
   }