2009-11-07 2 views
3

Я хочу иметь ListView с колоннами и особый стиль:WPF ListView: Header моделирование

Фоном для всех заголовков столбцов должны быть прозрачными, за исключением, когда мышь находится над одной из них.

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

Я попытался сыграть с шаблоном GridViewColumnHeader, но, похоже, изменил только активный фон столбца. Любая помощь?

ответ

1

Наконец, я нашел способ сделать это: в основном, вы установили триггер, который будет видеть, если родительский GridViewHeaderRowPresenter выбран. Затем все заголовки возвратят true к этому свойству.

Затем вы проверяете, имеет ли указатель над ним курсор, и только выбранный заголовок вернет true.

Результат будет выглядеть примерно так:

<ControlTemplate.Triggers> 
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, 
            AncestorType={x:Type GridViewHeaderRowPresenter}}, 
           Path=IsMouseOver}" 
       Value="True"> 
    <Setter TargetName="HeaderBack" Property="Background" 
      Value="{StaticResource HeaderActiveColumnBackground}"/> 
    <Setter TargetName="PART_HeaderGripper" Property="Background" 
      Value="{StaticResource VerticalLineColor}"/> 
    </DataTrigger> 
    <Trigger Property="IsMouseOver" Value="True"> 
    <Setter TargetName="HeaderBack" Property="Background" 
      Value="{StaticResource HeaderSelectedColumnBackground}"/> 
    </Trigger> 
    <Trigger Property="HasContent" Value="false"> 
    <Setter TargetName="HeaderBack" Property="Background" 
      Value="{StaticResource HeaderDefaultColumnNoContentBackground}"/> 
    <Setter TargetName="PART_HeaderGripper" Property="Background" 
      Value="{StaticResource HeaderDefaultColumnNoContentBackground}"/> 
    </Trigger> 
</ControlTemplate.Triggers> 
2

Для этого, я думаю, вам придется заменить весь стиль ListView. Microsoft has an example.

Вы должны поставить Border вокруг GridViewHeaderRowPresenter в ScrollViewer стиле, показанного там и добавить IsMouseOver триггер, чтобы установить фон этого Border в синий цвет.

Тогда, конечно, вам понадобится триггер IsMouseOver на шаблоне GridViewColumnHeader, чтобы сделать фон желтым.

Если вам нужны какие-либо дополнительные разъяснения, пожалуйста, спрашивайте.

- НТН, Дасти

+0

я предполагаю, что решение, которое я нашел схоже в идее к одному вы упоминаете, только то, что ваш требует стилизация ScrollViewer, и шахта будет в GridViewColumnHeader напрямую. В любом случае спасибо! – federubin