Подтвердить что ты не робот

Как вы создаете заголовок WPF GridView?

Я пошел от этого: Вопросы стиля WPF GridViewHeader

:

WPF GridView Headers

Теперь мне просто нужно избавиться от пробела справа от заголовка "Размер". У меня в основном есть шаблон для GridViewColumnHeader, который делает его TextBlock. Есть ли способ установить фон для этой области заголовка так, чтобы он охватывал всю ширину GridView?

ДОБАВЛЕННЫЙ КОД:

Это мой самый правый столбец. Сетка не охватывает 100% доступной области окна. В заголовке мне нужно все, что находится справа от этого столбца, чтобы иметь тот же фон, что и заголовки столбцов.

<Style x:Key="GridHeaderRight" TargetType="{x:Type GridViewColumnHeader}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                            <TextBlock Text="{TemplateBinding Content}" Padding="5" Width="{TemplateBinding Width}" TextAlignment="Right">
                                <TextBlock.Background>
                                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                        <GradientStop Offset="0.0" Color="#373638" />
                                        <GradientStop Offset="1.0" Color="#77797B" />
                                    </LinearGradientBrush>
                                </TextBlock.Background>
                            </TextBlock>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="OverridesDefaultStyle" Value="True" />
                <Setter Property="Background" Value="Green" />
                <Setter Property="Foreground" Value="White" />
                <Setter Property="FontSize" Value="12" />
                <Setter Property="Background">
                    <Setter.Value>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <GradientStop Offset="0.0" Color="#373638" />
                            <GradientStop Offset="1.0" Color="#77797B" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Style>

<GridViewColumn Width="200" HeaderContainerStyle="{ StaticResource GridHeaderRight}" Header="Size">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=EmployeeNumber}" HorizontalAlignment="Right"></TextBlock>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>

UPDATE

Я на один шаг ближе (я думаю) к решению этого.

Я добавил следующий код внутри тега GridView:

<GridView.ColumnHeaderContainerStyle>
    <Style TargetType="GridViewColumnHeader">
        <Setter Property="BorderThickness" Value="1"></Setter>
        <Setter Property="BorderBrush" Value="Green"></Setter>
        <Setter Property="Height" Value="Auto"></Setter>
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Offset="0.0" Color="#373638" />
                    <GradientStop Offset="1.0" Color="#77797B" />
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
    </Style>
</GridView.ColumnHeaderContainerStyle>

Граница есть только для того, чтобы вы могли видеть границу того, что охватывает этот стиль. Это увеличенное изображение того, что это делает. Кажется, я хочу, если я смогу избавиться от маленькой белой границы на дне.

Итак, я думаю, что удаление этой крошечной белой нижней границы также будет принятым ответом для этого.

ColumnHeaderContainerStyle http://img170.imageshack.us/img170/3851/columnheadercontainerst.png

4b9b3361

Ответ 1

Это простой стиль, который выполнит то, что вы ищете. Просто измените прозрачный фон на границе, чтобы быть вашим желаемым градиентом.

    <Style TargetType="{x:Type GridViewColumnHeader}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                    <Border BorderThickness="0,0,0,1" BorderBrush="Black" Background="Transparent">
                        <TextBlock x:Name="ContentHeader" Text="{TemplateBinding Content}" Padding="5,5,5,0" Width="{TemplateBinding Width}" TextAlignment="Center" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="OverridesDefaultStyle" Value="True" />
        <Setter Property="Foreground" Value="Black" />
        <Setter Property="FontFamily" Value="Segoe UI" />
        <Setter Property="FontSize" Value="12" />
    </Style>

Ответ 2

Я не уверен, понял ли я ваш вопрос (ссылки на изображения мертвы), но иногда самый простой способ - лучший.

Определите что-то вроде этого в разделе Ресурсы:

<Style TargetType="{x:Type GridViewColumnHeader}" BasedOn="{StaticResource {x:Type GridViewColumnHeader}}">
    <Setter Property="TextBlock.TextWrapping" Value="Wrap"/>
    <Setter Property="TextBlock.Foreground" Value="Black"/>
</Style>

Ответ 3

Посмотрите на свойство GridViewColumnHeader.Role. Образец в документации для GridViewColumnHeaderRole перечисления может дать вам несколько идей...

EDIT: Вы считали, что используете свойство GridView.HeaderStyle?

Ответ 4

Я решил эту проблему, но я думаю, что должен быть лучший способ сделать это. Проблема заключалась в том, что у меня был TextBlocks в заголовке каждого столбца. В неиспользуемой области ничего не было в строке заголовка. Я просто добавил TextBlock с тем же фоном в GridView.ColumnHeaderContainerStyle, и это случилось с остальной частью неиспользуемой ширины сетки.

<GridView.ColumnHeaderContainerStyle>
    <Style TargetType="GridViewColumnHeader">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                    <TextBlock Text="" Padding="5">
                        <TextBlock.Background>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                <GradientStop Offset="0.0" Color="#373638" />
                                <GradientStop Offset="1.0" Color="#77797B" />
                            </LinearGradientBrush>
                        </TextBlock.Background>
                    </TextBlock>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</GridView.ColumnHeaderContainerStyle>