WPF控制模板触发器分配给容器

时间:2015-04-23 10:07:57

标签: c# wpf xaml

我为菜单的顶级项目定义了一个控件模板,如下所示:

<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>

但不起作用。关于我哪里出错的任何建议?

1 个答案:

答案 0 :(得分:2)

要使整个Border(或Grid)点击测试可见,您需要使用Background初始化Brush属性。您可以将其设置为Transparent,例如

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