c# - 按钮 ContextMenu 图像仅显示在最后一项
问题描述
我ContextMenu
对Button
.
在 ResourceDictionary 中具有以下 Columndefinition 的内部Button
:DataGrid
<DataGridTemplateColumn Width="16" x:Key="ShowContextMenuColumn" x:Shared="False" KeyboardNavigation.IsTabStop="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Style="{StaticResource ShowContextMenuButtonStyle}">
<Button.ContextMenu>
<ContextMenu ItemsSource="{Binding Data.ContextActionItems, Source={StaticResource proxy}}" DisplayMemberPath="DisplayText">
<ContextMenu.Resources>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Icon">
<Setter.Value>
<Image Source="{Binding Image}"/>
</Setter.Value>
</Setter>
<Setter Property="Command" Value="{Binding Command}"/>
</Style>
</ContextMenu.Resources>
</ContextMenu>
</Button.ContextMenu>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellStyle>
<Style TargetType="{markup:Type DataGridCell}" BasedOn="{StaticResource BaseDataGridCellStyle}">
<Setter Property="AutomationProperties.Name" Value="ContextMenu"/>
</Style>
</DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn>
ObservableCollection<DisplayListActionItem>
ContextActionItems 是在一个抽象的通用基类中定义的,该基类由多个 ViewModel 继承。
DisplayListActionItem-Class 看起来像:
public class DisplayListActionItem : NotifyBase
{
public string DisplayText
{
get { return Get<string>(); }
set { Set(value); }
}
public ICommand Command
{
get { return Get<ICommand>(); }
set { Set(value); }
}
public ImageSource Image
{
get { return Get<ImageSource>(); }
set { Set(value); }
}
}
一切正常。唯一的问题是,图像仅显示在ContextMenu
. 如果我删除最后一项,则会显示新的最后一项的图像。我不明白这是什么原因。
我已经检查了绑定错误的调试输出,但没有。
有什么想法可能导致这个问题吗?
解决方案
自己解决了。
解决方案是修改 ContextMenu-ItemContainerStyle,而不是在 ContextMenu 的资源中做需要的东西。
Button 的新 xaml 如下所示:
<Button Style="{StaticResource ShowContextMenuButtonStyle}">
<Button.ContextMenu>
<ContextMenu ItemsSource="{Binding Data.ContextActionItems, Source={StaticResource proxy}}" >
<ContextMenu.ItemContainerStyle>
<Style TargetType="{x:Type MenuItem}">
<Setter Property="Icon" Value="{Binding Image, Converter={converter:ImageSourceToImageConverter}}"/>
<Setter Property="Header" Value="{Binding DisplayText}"/>
<Setter Property="Command" Value="{Binding Command}"/>
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>
</Button.ContextMenu>
</Button>
推荐阅读
- kubernetes-helm - 掌舵搜索功能未从回购中获取结果
- python-3.x - 根据第二个列表的值拆分列表
- iframe - 从 iframe src 获取链接
- pandas - 以字符串形式计数并存储映射到其他值
- ruby-on-rails - Rails 是否支持带有方法 post 的 link_to?
- python - 如何使用 scipy.brentq 函数,使其等效于帕斯卡代码?
- matlab - 插入 LaTeX 时,MATLAB 图形的大小不同(尽管使用相同的代码生成)
- mongodb - 仅使用 Meteor.JS 中的数据层
- ios - SwiftUI 在圆角矩形内屏蔽一个矩形
- webdriver-io - WebDriverIO:browser.pause 不起作用