Элемент управления ControlTemplate DataGridColumnHeader, видимый за пределами столбцов - PullRequest
0 голосов
/ 01 мая 2018

Я настраиваю стиль DataGrid и хочу описать ControlTemplate заголовка столбцов.

Это в основном TextBlock и изображение, но проблема в том, что когда я добавляю контрольное изображение, я нахожу его также в нижней части моего заголовка ...

result image

Я пробовал много вещей, чтобы решить проблему, например, используя вместо этого DataTemplate, но он не работает лучше ...

Вот код XAML:

<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="MinWidth" Value="0" />
<Setter Property="MinHeight" Value="50" />
<Setter Property="FontFamily" Value="{StaticResource LatoRegular}" />
<Setter Property="Foreground" Value="#FF000000" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
            <Grid>
                <Border Grid.Column="0" BorderThickness="0,1,0,1" BorderBrush="#FFEDEDED">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="20" />
                        </Grid.ColumnDefinitions>

                        <TextBlock Grid.Column="0" Margin="6" HorizontalAlignment="Left" VerticalAlignment="Center"
                                TextTrimming="CharacterEllipsis"
                                FontFamily="{StaticResource LatoRegular}"
                                Text="{TemplateBinding Content}" />

                        <Image Grid.Column="1" Height="16" Width="16" Source="..\..\View\Image\search.png" RenderOptions.BitmapScalingMode="HighQuality" />
                    </Grid>
                </Border>

                <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Opacity="0" Cursor="SizeWE" />
                <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Opacity="0" Cursor="SizeWE" />
            </Grid>
        </ControlTemplate>
    </Setter.Value>
</Setter>

У вас есть идея, чтобы исправить или обойти проблему, пожалуйста?

Спасибо всем!

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Вы должны сделать ниже две вещи, которые решат проблему:

  1. Установите ширину последнего столбца на *, чтобы дополнительный столбец не создавался.
  2. В вашем шаблоне элемента управления DataGridColumnHeader установите для ширины первого столбца сетки значение «Авто» и горизонтальное выравнивание изображения влево.

Вот код

<Style TargetType="{x:Type DataGridColumnHeader}">
        <Setter Property="SnapsToDevicePixels" Value="True" />
        <Setter Property="MinWidth" Value="0" />
        <Setter Property="MinHeight" Value="50" />
        <Setter Property="FontFamily" Value="{StaticResource LatoRegular}" />
        <Setter Property="Foreground" Value="#FF000000" />
        <Setter Property="FontSize" Value="14" />
        <Setter Property="Cursor" Value="Hand" />
        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                    <Grid>
                        <Border Grid.Column="0" BorderThickness="0,1,0,1" BorderBrush="#FFEDEDED">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="auto" />
                                    <ColumnDefinition Width="20" />
                                </Grid.ColumnDefinitions>

                                <TextBlock Grid.Column="0" Margin="6" HorizontalAlignment="Left" VerticalAlignment="Center"
                            TextTrimming="CharacterEllipsis"
                            Text="{TemplateBinding Content}" />
                                <Image Grid.Column="1" Height="16" Width="16" Source="C:\Users\a0711212\Desktop\profilePic.png"
                                      HorizontalAlignment="Left"  RenderOptions.BitmapScalingMode="HighQuality" />
                            </Grid>
                        </Border>

                        <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Opacity="0" Cursor="SizeWE" />
                        <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Opacity="0" Cursor="SizeWE" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
0 голосов
/ 01 мая 2018

Мне это удалось:

Без ключа для стиля таблицы данных по умолчанию

<Style TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="MinWidth" Value="0" />
    <Setter Property="MinHeight" Value="50" />
    <Setter Property="FontFamily" Value="{StaticResource LatoRegular}" />
    <Setter Property="Foreground" Value="#FF000000" />
    <Setter Property="FontSize" Value="14" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                <Border Grid.Column="0" BorderThickness="0,1,0,1" BorderBrush="#FFEDEDED" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

и стиль для каждого столбца

<Style x:Key="styleDtgHeader" TargetType="{x:Type DataGridColumnHeader}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="MinWidth" Value="0" />
    <Setter Property="MinHeight" Value="50" />
    <Setter Property="FontFamily" Value="{StaticResource LatoRegular}" />
    <Setter Property="Foreground" Value="#FF000000" />
    <Setter Property="FontSize" Value="14" />
    <Setter Property="Cursor" Value="Hand" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
                <Grid>
                    <Border Grid.Column="0" BorderThickness="0,1,0,1" BorderBrush="#FFEDEDED" Background="red">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="20" />
                            </Grid.ColumnDefinitions>

                            <TextBlock Grid.Column="0" Margin="6" HorizontalAlignment="Left" VerticalAlignment="Center"
                                    TextTrimming="CharacterEllipsis"
                                    FontFamily="{StaticResource LatoRegular}"
                                    Text="{TemplateBinding Content}" />

                            <Image Grid.Column="1" Height="16" Width="16" Source="..\..\View\Image\search.png" RenderOptions.BitmapScalingMode="HighQuality" />
                        </Grid>
                    </Border>

                    <Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Opacity="0" Cursor="SizeWE" />
                    <Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Opacity="0" Cursor="SizeWE" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Но я сомневаюсь, что это чистое решение?

...