确保箭头键跳过WPF菜单中的分隔符项?

时间:2011-11-15 19:43:55

标签: wpf separator

在我的WPF菜单中,我有一个分隔符(System.Windows.Controls.Separator)项,在通过箭头键导航菜单时似乎无形地接受焦点。我希望箭头导航路径跳过这些分隔符。我尝试设置IsEnabled并将IsTabStop设置为false,但这些似乎都没有任何效果。

在XAML中,如何指定应跳过分隔符项?

更新:这是我的分隔符的当前样式XAML:

<Style TargetType="{x:Type Separator}">
        <Setter Property="Focusable" Value="false" />
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="IsTabStop" Value="false" />
        <Setter Property="IsHitTestVisible" Value="false" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Separator}">
                    <Border BorderThickness="1" 
                            Margin="10,5,10,5">
                        <Border.BorderBrush>

                            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1" >
                                <GradientStop Color="{DynamicResource Nui10Color}" Offset="0"/>
                                <GradientStop Color="{DynamicResource Nui50Color}" Offset="1"/>
                            </LinearGradientBrush>

                        </Border.BorderBrush>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

2 个答案:

答案 0 :(得分:2)

我明白了。我需要在MenuItem本身上设置Focusable,而不是模板:

<!-- style for menu item separators -->
            <Style TargetType="{x:Type MenuItem}" 
           BasedOn="{StaticResource {x:Type MenuItem}}" 
           x:Key="MenuItemStyleSeparator">
                            <!-- the following line is what I needed -->
                <Setter Property="Focusable" Value="False" />
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type MenuItem}">
                            <Separator IsEnabled="false" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

答案 1 :(得分:1)

尝试在其上设置IsHitTestVisible="False"。它应该禁止所有命中测试