WPF DataGrid Заголовок шаблона Таинственный отступ - PullRequest
3 голосов
/ 09 июня 2010

Я помещаю одну кнопку с изображением в заголовок столбца 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, так и для столбца.

Вот изображение: http://img716.imageshack.us/img716/1787/68487749.png

IПредположим, что это отступ от того, что является родительским элементом кнопки.Кто-нибудь знает способ его устранения?


См .:


Решение:

<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>

Ответы [ 2 ]

3 голосов
/ 09 июня 2010

Снуп на помощь!

Теперь, когда вы обновили вопрос, я нашел интересный код в DataGridHeaderBorder.cs :

   protected override Size ArrangeOverride(Size arrangeSize)
   {
     //...
     if (padding.Equals(new Thickness()))
     {
       padding = DefaultPadding;
     }
     //...
     child.Arrange(new Rect(padding.Left, padding.Top, childWidth, childHeight));
   }

Там, где DefaultPadding не равен 0 ... Даже если они не используют стандартный Padding, они размещают ребенка слегка перемещенным.

Как это исправить? Возможно, написание собственного шаблона для заголовка таблицы поможет. Или вы можете попробовать отрицательные поля для изображения. Не нравится ни один из этих подходов. Но пока не могу найти ничего лучшего.

1 голос
/ 20 мая 2014

Использование Padding = "0,0.000001,0,0", кажется, обходит их проверочный код и работает (по крайней мере, в .NET 4.0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...