所以我有一个“上下文菜单”,其中包含一个“菜单项”,它会分解成一系列名称列表:
现在以上代码可以正常工作并显示我的名称列表。现在我想使用Pack URI在每个名称旁边添加一个图标。所以从this question中我可以看到最好的方法是对
现在我的所有名称都是ControlTemplate,没有显示图标...如何通过ItemContainerStyle向上下文菜单的菜单项添加图标?编辑:我已经尝试过:
我可以帮您进行翻译。该文段的含义是“当我在菜单中添加多个选项时,只有最后一个选项显示图标?”
<ContextMenu>
<MenuItem Header="Set As Default For" ItemsSource="{Binding Source={StaticResource Names}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value={Binding Name}/>
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.DoSomething}" />
<Setter Property="CommandParameter" Value="{Binding }" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
现在以上代码可以正常工作并显示我的名称列表。现在我想使用Pack URI在每个名称旁边添加一个图标。所以从this question中我可以看到最好的方法是对
Header
进行模板化,所以我首先尝试了这个问题。<ContextMenu>
<MenuItem Header="Set As Default For" ItemsSource="{Binding Source={StaticResource Names}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header">
<Setter.Value>
<StackPanel>
<Image Width="20" Height="20" Source="/MyProj;component/Resources/MyImg.png" />
<ContentPresenter Content="{Binding Name}" />
</StackPanel>
</Setter.Value>
</Setter>
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.DoSomething}" />
<Setter Property="CommandParameter" Value="{Binding }" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
但是这给了我一个错误:
指定的元素已经是另一个元素的逻辑子元素。请先断开连接。
所以在一些研究之后,我尝试了:
<ContextMenu>
<MenuItem Header="Set As Default For" ItemsSource="{Binding Source={StaticResource Names}}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header">
<Setter.Value>
<ControlTemplate>
<StackPanel>
<Image Width="20" Height="20" Source="/MyProj;component/Resources/MyImg.png" />
<ContentPresenter Content="{Binding Name}" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MenuItem}, Path=DataContext.DoSomething}" />
<Setter Property="CommandParameter" Value="{Binding }" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
</ContextMenu>
现在我的所有名称都是ControlTemplate,没有显示图标...如何通过ItemContainerStyle向上下文菜单的菜单项添加图标?编辑:我已经尝试过:
<Setter Property="Header" Value="{Binding Name}"/>
<Setter Property="Icon">
<Setter.Value>
<Image Width="20" Height="20" Source="/MyProj;component/Resources/MyImg.png" />
</Setter.Value>
</Setter>
我可以帮您进行翻译。该文段的含义是“当我在菜单中添加多个选项时,只有最后一个选项显示图标?”
HeaderTemplate
代替Header
,并使用DataTemplate
代替ControlTemplate
。但个人建议将Icon
属性设置为Style
中的另一个Setter
。你的代码将把图标放置在MenuItem
的内容部分,而不是Icon
部分。 - dkozlHeaderTemplate
和DataTemplate
是可行的。而且你也说得对,我的代码将图标放在了标题中,这不是我计划中的。你知道如何在样式中使用Pack URI来设置图标吗? - JKennedyx:Shared
设置为false,对于你的Style
,像这样:<Style TargetType="MenuItem" x:Shared="False">
。 - dkozlx:shared
属性? - JKennedy