Wpf 自定义控件样式仅在上下文菜单第二次出现时应用于该菜单

Wpf 自定义控件样式仅在上下文菜单第二次出现时应用于该菜单,wpf,xaml,resources,styles,contextmenu,Wpf,Xaml,Resources,Styles,Contextmenu,我正在尝试创建一个上下文菜单,左侧没有图标栏 我这样做的方式是通过应用于我的窗口中所有ContextMenus和MenuItems的自定义样式: <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> ... ... <ResourceDictionary&

我正在尝试创建一个上下文菜单,左侧没有图标栏

我这样做的方式是通过应用于我的窗口中所有ContextMenus和MenuItems的自定义样式:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            ...
            ...
            <ResourceDictionary>
                <Style TargetType="ContextMenu">
                    <Setter Property="ItemsPanel">
                        <Setter.Value>
                            <ItemsPanelTemplate>
                                <StackPanel Background="White"/>
                            </ItemsPanelTemplate>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="ItemContainerStyle">
                        <Setter.Value>
                            <Style TargetType="MenuItem">
                                <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
                                <Setter Property="CommandParameter" Value="{Binding}"/>
                            </Style>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="ItemTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <Grid Margin="-20,0,-40,0">
                                    <TextBlock Text="{Binding}"/>
                                </Grid>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
                        <Button Content="Add"
                            Margin="5"
                            Width="90"
                            ContextMenuService.Placement="Bottom">
                        <Button.ContextMenu>
                            <ContextMenu ItemsSource="{Binding ModifierOptions}"/>
                        </Button.ContextMenu>
                    </Button>

...
...
然后,我在窗口中的按钮上生成ContextMenu:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            ...
            ...
            <ResourceDictionary>
                <Style TargetType="ContextMenu">
                    <Setter Property="ItemsPanel">
                        <Setter.Value>
                            <ItemsPanelTemplate>
                                <StackPanel Background="White"/>
                            </ItemsPanelTemplate>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="ItemContainerStyle">
                        <Setter.Value>
                            <Style TargetType="MenuItem">
                                <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>
                                <Setter Property="CommandParameter" Value="{Binding}"/>
                            </Style>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="ItemTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <Grid Margin="-20,0,-40,0">
                                    <TextBlock Text="{Binding}"/>
                                </Grid>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
                        <Button Content="Add"
                            Margin="5"
                            Width="90"
                            ContextMenuService.Placement="Bottom">
                        <Button.ContextMenu>
                            <ContextMenu ItemsSource="{Binding ModifierOptions}"/>
                        </Button.ContextMenu>
                    </Button>

问题是第一次出现上下文菜单时,它缺少样式,因此它仍然有侧栏

如果在此之后再次右键单击该按钮,则样式将正确应用,并且不存在任何边柱。
知道会发生什么吗?

作为一种解决方法,您可以将样式移动到单独的
ResourceDictionary
。它适用于我的情况。

我从您的示例中删除了MergedDictionaries,而且效果很好。还不知道为什么。。。