2015-02-22 2 views
1

У меня есть элемент ItemsControl, где datatemplate является расширителем. Ниже приведен шаблон и стиль, используемые для заголовка exapnder.WPF Expander - Highlight Header on mouse over

<DataTemplate x:Key="expanderHeader"> 
    <ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue"/> 
    <DataTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="TextBlock.FontWeight" Value="Bold"/> 
     </Trigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

<Style TargetType="Expander"> 
    <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/> 
</Style> 

Заголовок жирным шрифтом, когда курсор мыши над фактическим текстом заголовка, но то, что я хочу, это текст заголовка, чтобы быть подчеркнуты, если я мышь над любой частью расширителя. Чтобы исправить это, я думаю, мне нужно переместить триггер в сам стиль расширителя, но здесь я не уверен, как обеспечить выделение только заголовка, а не всего содержимого внутри расширителя, что происходит, когда я использую следующий стиль:

<Style TargetType="Expander"> 
     <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="TextBlock.FontWeight" Value="Bold" /> 
      </Trigger> 
     </Style.Triggers>   
    </Style> 

Как я могу настроить выше, так что только текст заголовка жирным шрифтом, когда thenouse перемещается по любой части расширителя (при расширении конечно).

ответ

2

Самое простое решение, с которым я мог придумать, - создать второй DataTemplate для переключения на мышь.

<DataTemplate x:Key="expanderHeader"> 
    <ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue"/> 
</DataTemplate> 
<DataTemplate x:Key="expanderHeaderMouseOver"> 
    <ContentPresenter Content="{Binding}" TextBlock.Foreground="Blue" TextElement.FontWeight="Bold"/> 
</DataTemplate> 

А затем изменить стиль расширителя, чтобы установить, что HeaderTemplate на мыши над ...

<Style TargetType="Expander"> 
    <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeader}"/> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="HeaderTemplate" Value="{StaticResource expanderHeaderMouseOver}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Очевидно, что это означает, что вы должны будете поддерживать 2 шаблоны данных, которые не действительно Идеал ... Там, вероятно, лучшее решение (возможно, с помощью прикрепленных свойств), но я не мог заставить что-то еще работать.

+0

Большое спасибо. Я думаю, что это прекрасное решение и работает для меня. – mike01010