C# MenuItem dosen';加压后不要点火

C# MenuItem dosen';加压后不要点火,c#,wpf,wpf-style,C#,Wpf,Wpf Style,我有一个菜单项样式,它工作得很好,但当我选择(单击)菜单项时,它不会再次触发“IsMouseOver”或“IsHighlighted” 我试图通过使用IsKeyboardFocused来修复它,但另一面的IsPressed会导致死亡,所以我也不能使用它 以下是我的风格代码: <Style TargetType="{x:Type MenuItem}" x:Key="MyCustomMenuItem"> <Setter Property="Overrides

我有一个菜单项样式,它工作得很好,但当我选择(单击)菜单项时,它不会再次触发“IsMouseOver”或“IsHighlighted”

我试图通过使用IsKeyboardFocused来修复它,但另一面的IsPressed会导致死亡,所以我也不能使用它

以下是我的风格代码:

   <Style  TargetType="{x:Type MenuItem}" x:Key="MyCustomMenuItem">
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="FontFamily" Value="{DynamicResource MenuFontFamily}"/>
        <Setter Property="Focusable" Value="False"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type MenuItem}">

                    <Border x:Name="brd" Background="{StaticResource MainBrush}" >
                        <Grid>
                            <ContentPresenter Content="{TemplateBinding Header}" Margin="10,3,10,3"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />

                            <Popup x:Name="PART_Popup" Placement="Right" AllowsTransparency="True" Focusable="False" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}">
                                <Border x:Name="SubMenuBorder" BorderBrush="{DynamicResource KeyColor}" BorderThickness="1" Background="{DynamicResource MainBrushTransparent}" Padding="2">
                                    <ScrollViewer x:Name="SubMenuScrollViewer" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}">
                                        <Grid RenderOptions.ClearTypeHint="Enabled">
                                            <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
                                                <Rectangle x:Name="OpaqueRect" Fill="{DynamicResource MainBrushTransparent}" Height="{Binding ActualHeight, ElementName=SubMenuBorder}" Width="{Binding ActualWidth, ElementName=SubMenuBorder}"/>
                                            </Canvas>
                                            <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/>
                                        </Grid>
                                    </ScrollViewer>
                                </Border>
                            </Popup>

                        </Grid>
                    </Border>

                    <ControlTemplate.Triggers>

                        <Trigger Property="IsHighlighted" Value="True">

                            <Trigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#349E7E" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                                        <ColorAnimation Duration="0:0:0.300" To="#FFEAEAEA" Storyboard.TargetProperty="Foreground.Color" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </Trigger.EnterActions>

                            <Trigger.ExitActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#2C2C2C" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                                        <ColorAnimation Duration="0:0:0.300" To="#FF8B8B8B" Storyboard.TargetProperty="Foreground.Color" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </Trigger.ExitActions>
                        </Trigger>

                        <Trigger Property="IsPressed" Value="True">
                            <Trigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#FF34008D" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </Trigger.EnterActions>

                            <Trigger.ExitActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#2C2C2C" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </Trigger.ExitActions>
                        </Trigger>


                        <Trigger Property="IsSubmenuOpen" Value="True">
                            <Trigger.EnterActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#349E7E" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                                        <ColorAnimation Duration="0:0:0.300" To="#FFEAEAEA" Storyboard.TargetProperty="Foreground.Color" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </Trigger.EnterActions>

                            <Trigger.ExitActions>
                                <BeginStoryboard>
                                    <Storyboard>
                                        <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#2C2C2C" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                                        <ColorAnimation Duration="0:0:0.300" To="#FF8B8B8B" Storyboard.TargetProperty="Foreground.Color" />
                                    </Storyboard>
                                </BeginStoryboard>
                            </Trigger.ExitActions>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

按“功能表”后如何使其工作? 如果我移除press trigger,它可以正常工作:\

RemoveStoryboard
替换
IsHighlighted
触发器的
中的
元素,并将
IsPressed
动画的
FillBehavior
属性设置为
Stop

<Trigger Property="IsHighlighted" Value="True">

    <Trigger.EnterActions>
        <BeginStoryboard x:Name="sb1">
            <Storyboard>
                <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#349E7E" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                <ColorAnimation Duration="0:0:0.300" To="#FFEAEAEA" Storyboard.TargetProperty="Foreground.Color" />
            </Storyboard>
        </BeginStoryboard>
    </Trigger.EnterActions>

    <Trigger.ExitActions>
        <RemoveStoryboard BeginStoryboardName="sb1" />
    </Trigger.ExitActions>
</Trigger>

<Trigger Property="IsPressed" Value="True">
    <Trigger.EnterActions>
        <BeginStoryboard x:Name="sb2">
            <Storyboard>
                <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#FF34008D"
                                                            FillBehavior="Stop"
                                                            Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
            </Storyboard>
        </BeginStoryboard>
    </Trigger.EnterActions>
</Trigger>

IsHighlighted
触发器的
ExitAction
中的
元素替换为
RemoveStoryboard
,并将
IsPressed
动画的
FillBehavior
属性设置为
Stop

<Trigger Property="IsHighlighted" Value="True">

    <Trigger.EnterActions>
        <BeginStoryboard x:Name="sb1">
            <Storyboard>
                <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#349E7E" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
                <ColorAnimation Duration="0:0:0.300" To="#FFEAEAEA" Storyboard.TargetProperty="Foreground.Color" />
            </Storyboard>
        </BeginStoryboard>
    </Trigger.EnterActions>

    <Trigger.ExitActions>
        <RemoveStoryboard BeginStoryboardName="sb1" />
    </Trigger.ExitActions>
</Trigger>

<Trigger Property="IsPressed" Value="True">
    <Trigger.EnterActions>
        <BeginStoryboard x:Name="sb2">
            <Storyboard>
                <ColorAnimation Storyboard.TargetName="brd" Duration="0:0:0.300" To="#FF34008D"
                                                            FillBehavior="Stop"
                                                            Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" />
            </Storyboard>
        </BeginStoryboard>
    </Trigger.EnterActions>
</Trigger>


FillBehavior
成功了,谢谢!不需要移除VestoryBoard
FillBehavior
成功了,谢谢!不需要移除VestoryBoard