C# WPF数据网格头模板
我将一个带有图像的按钮放在DataGrid列的标题中。单元格模板也只是一个带有图像的简单按钮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
<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));
}