WPF DataGrid HeaderTemplate Geheimnisvolle Polsterung
Ich lege eine Schaltfläche mit einem Bild in die Kopfzeile einer Spalte einer DataGrid-Komponente. Die Zelle template ist auch einfach nur ein button mit einem Bild.
<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>
Beim Rendern, der header hat etwa 10-15px Abstand auf der rechten Seite nur, die bewirkt, dass die Zellen zu offensichtlich Rendern auf die Breite der die Zelle verlässt-Taste mit leeren Raum auf beiden Seiten. Ein pixel-Perfektionist-das stört die Hölle aus mir heraus. Ich hatte zunächst gedacht, dass es war Platz für die Pfeile angezeigt, wenn sortiert, aber ich habe die Sortierung deaktiviert sowohl das gesamte DataGrid und explizit auf die Spalte.
Hier ist ein Bild:
http://img716.imageshack.us/img716/1787/68487749.png
Ich nehme an, dies ist die Polsterung aus, was ist das Eltern-element der Schaltfläche. Kennt jemand einen Weg, Sie zu beseitigen?
Finden Sie unter:
Lösung:
<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>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Snoop die Rettung!
Nun, dass Sie aktualisiert, die Frage fand ich einen interessanten code in der DataGridHeaderBorder.cs:
Wo DefaultPadding ist nicht 0,..., Auch wenn Sie nicht verwenden eine standard-Polsterung veranlassen Sie das Kind ein wenig bewegt.
Wie man dieses Problem beheben? Vielleicht schreiben Sie Ihre eigene Vorlage für die Kopfzeile der Tabelle wird den trick tun. Oder Sie könnten versuchen, negative Margen für das Bild. Nicht wie keiner dieser Ansätze. Aber ich kann nicht finden, etwas noch besser.
DataGridHeaderBorder
hält, die dieContentPresenter
(die Eltern derButton
). Keine Eigenschaften angeben, wo die Polsterung stammt. Ugh.Mit Padding="0,0.000001,0,0" scheint zu gehen um Ihren code überprüfen und funktioniert (zumindest in .NET 4.0).
<Setter Property="Padding" Value="0,0.000001,0,0" />
- ich kann bestätigen, diese Problemumgehung mit .NET 4.5 und Visual Studio 2017.