Wpf 自定义控件样式仅在上下文菜单第二次出现时应用于该菜单
我正在尝试创建一个上下文菜单,左侧没有图标栏 我这样做的方式是通过应用于我的窗口中所有ContextMenus和MenuItems的自定义样式:Wpf 自定义控件样式仅在上下文菜单第二次出现时应用于该菜单,wpf,xaml,resources,styles,contextmenu,Wpf,Xaml,Resources,Styles,Contextmenu,我正在尝试创建一个上下文菜单,左侧没有图标栏 我这样做的方式是通过应用于我的窗口中所有ContextMenus和MenuItems的自定义样式: <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> ... ... <ResourceDictionary&
<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,而且效果很好。还不知道为什么。。。