2015-04-23 3 views
0

Я определил шаблон управления для моих главных элементов уровня меню следующим образом:WPF Шаблон управления Trigger Назначено контейнер

<ControlTemplate x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}" TargetType="MenuItem"> 
    <Border x:Name="Border"> 
     <Grid x:Name="Grid" > 
     <ContentPresenter 
      ContentSource="Header" 
      RecognizesAccessKey="False" 
      Margin="10,5,50,5" 
      TextBlock.FontFamily="Segoe UI" 
      TextBlock.FontSize="14" 
      TextBlock.Foreground="White"/> 
     </Grid> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsHighlighted" Value="true"> 
     <Setter TargetName="Border" Property="Background" Value="{StaticResource ControlMouseOver}"/> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

Это дает мне стиль, я хочу, однако триггер срабатывает только когда я нависаю над текстом меню. В идеале я хочу, чтобы элемент стал подсвечиваться, когда я навешиваю над своим родительским элементом сетки. Пробовал сменить триггер на это

<ControlTemplate.Triggers> 
    <Trigger Property="Grid.IsMouseOver" Value="true"> 
     <Setter TargetName="Border" Property="Background" Value="{StaticResource ControlMouseOver}"/> 
    </Trigger> 
</ControlTemplate.Triggers> 

но не работает. Какие-либо предложения относительно того, где я ошибаюсь?

ответ

2

Для того, чтобы весь Border (или Grid) хит теста видимого вам необходимо инициализировать Background свойство с некоторой Brush. Вы можете установить его на Transparent, например

<ControlTemplate x:Key="{x:Static MenuItem.TopLevelItemTemplateKey}" TargetType="MenuItem"> 
    <Border x:Name="Border" Background="Transparent" > 
     <!-- --> 
    </Border> 
    <!-- --> 
</ControlTemplate> 
+0

Тонкий! прекрасно работает! –

Смежные вопросы