WPF菜单项模板问题

时间:2011-02-10 12:02:52

标签: wpf

我为menuItem编写了一个模板,其中我有一个Toggle按钮,而该按钮又有一个模板。在按钮的模板中,我通过改变不同边框的不透明度为按钮的不同视觉状态提供不同的视觉效果。现在说当单击menuItem时,会显示动作按钮上的单击效果。但当我再次悬停在menuItem上时,我希望即使在切换按钮的选中状态下也能获得相同的高亮效果。但突出显示的效果应用于整个菜单项,除了此切换按钮,因为悬停事件不会传播到按钮。

想要附上图片以使问题清楚,但由于我是新手,我不允许这样做。

当menuItem突出显示时,如何设置边框的不透明度,使点击的效果为0!

        

        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="Icon"/>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" SharedSizeGroup="Shortcut"/>
            </Grid.ColumnDefinitions>
            <Grid x:Name="stackPanel" Background="{StaticResource DataLayerPanelBackGroundColorBrush}" >
                <Grid.Resources>
                    <ResourceDictionary Source="../Themes/Framework.xaml"/>
                </Grid.Resources>
                <Border x:Name="backgroundMouseOverVisual2" BorderThickness="0,0,0,0" Margin="0,3,0,3"  
                                    Background="{StaticResource ActionButtonMouseOverBackgroundColorBrush}" Opacity="0"/>
                <local:ActionButton DataContext="{TemplateBinding Tag}" x:Name="actionButton" Background="White"
                    MultiActionIdent="{Binding Converter={StaticResource ActionToIdentConverter}}"       
                    SnapsToDevicePixels="True" Style="{StaticResource MultiActionMenuItemActionButtonStyle}" Margin="0" 
                    />
            </Grid>
            <StackPanel x:Name="contentStackPanel" Background="{StaticResource DataLayerPanelBackGroundColorBrush}" Grid.Column="1">
                <ContentPresenter
                    TextElement.Foreground="{StaticResource MenuTextColorBrush}"
                    SnapsToDevicePixels="True"
                Name="HeaderHost"
                ContentSource="Header"
                RecognizesAccessKey="True"
                Width="Auto"
                Margin="10,4,35,4" />
            </StackPanel>
            <TextBlock
                x:Name="InputGestureText"
                Grid.Column="2"
                Text="{TemplateBinding InputGestureText}"
                DockPanel.Dock="Right" />
        </Grid>
        <Border x:Name="Border" BorderThickness="0.5" Margin="1,1,1,1" Padding="2,2,2,2" BorderBrush="Black" Background="{x:Null}" Opacity="0"/>
    </Grid>

以下是ToggleButton模板,在上面的模板中命名为actionButton:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

1 个答案:

答案 0 :(得分:0)

您需要使用Style Triggers根据不同的状态更改样式。

示例代码段:

    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="true">
            <Setter Property="BorderThickness" Value="0"/>
        </Trigger>
    </Style.Triggers>