Ячейка DataGrid выделена стилем тени текста? - PullRequest
2 голосов
/ 15 марта 2012

Я пытаюсь добавить тень текста в текст ячейки при выделении строки.

UPDATE:

Вот что у меня сейчас:

<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="TextOptions.TextFormattingMode" Value="Display" />
    <Setter Property="RenderOptions.ClearTypeHint" Value="Enabled" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridCell}">
                <Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                    <ContentPresenter x:Name="CellContent" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="CellContent" Property="TextOptions.TextFormattingMode" Value="Display" />
                        <Setter TargetName="CellContent" Property="RenderOptions.ClearTypeHint" Value="Enabled" />
                        <Setter TargetName="CellContent" Property="Effect">
                            <Setter.Value>
                                <DropShadowEffect ShadowDepth="2" BlurRadius="2" Color="Black" RenderingBias="Quality" />
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Он добавляет тень только к тексту (именно то, что я хочу) и когда строка выбрана (именно то, что я хочу). Единственная проблема сейчас в том, что я теряю субпиксельное сглаживание:

enter image description here

Выбранная строка - та, что ниже, с голубоватым фоном. Сейчас используется какое-то серое сглаживание, из-за чего он выглядит плохо. Я пытался установить RenderOptions.ClearTypeHint безуспешно. Как включить его, чтобы он выглядел таким же четким и четким, как строки без выделения?

Вот так выглядит сглаживание серого в 100% размере (размыто):

enter image description here

1 Ответ

4 голосов
/ 16 марта 2012

Фон ячейки мешает вам увидеть эффект.Просто установите фон таким образом, но я не знаю, оцените ли вы результат:

<Style TargetType="{x:Type DataGridCell}">
  <Setter Property="Background" Value="Transparent"/>
  <Style.Triggers>
    <Trigger Property="IsSelected" Value="True">
      <Setter Property="Effect">
        <Setter.Value>
          <DropShadowEffect ShadowDepth="2"
                            BlurRadius="2"
                            Color="Black"
                            RenderingBias="Quality"/>
        </Setter.Value>
      </Setter>
    </Trigger>
  </Style.Triggers>
</Style>

Редактировать

Может быть, это лучше, потому что это дает вам большеуправление:

<Style TargetType="{x:Type DataGridCell}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type DataGridCell}">
        <ContentPresenter x:Name="CellContent"/>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="True">
            <Setter TargetName="CellContent" Property="Effect">
              <Setter.Value>
                <DropShadowEffect ShadowDepth="2"
                                  BlurRadius="2"
                                  Color="Black"
                                  RenderingBias="Quality"/>
              </Setter.Value>
            </Setter>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...