gpt4 book ai didi

wpf - 无法将事件处理程序附加到样式中的上下文菜单项

转载 作者:行者123 更新时间:2023-12-04 02:03:38 25 4
gpt4 key购买 nike

我正在尝试修改 ContextMenu 可编辑单元格上的 XamNumericEditor 的默认值 XamDataGrid

这是我的 XAML 代码:

<igDP:XamDataGrid.Resources>
<Style TargetType="{x:Type editors:XamNumericEditor}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<ContextMenu.Items>
<MenuItem Header="Select All"
Command="SelectAll">
<MenuItem.Icon>
<Image Source="..\icons\table_select_all.png"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Accept for column"
Click="MenuItem_Click">
</MenuItem>
</ContextMenu.Items>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</igDP:XamDataGrid.Resources>

文件隐藏代码包含此 MenuItem 的事件处理程序:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
//...
}

但是当我启动它时,我捕获了一个带有消息的异常:
无法将“System.Windows.Controls.MenuItem”类型的对象转换为“System.Windows.Controls.ContextMenu”类型。

你能帮我解决吗?谢谢。

最佳答案

尝试添加 ContextMenu作为资源并将其引用为 StaticResource我没有 XamDataGrid已安装,所以我无法尝试,但它应该遵循以下几行。

<igDP:XamDataGrid.Resources>
<ContextMenu x:Key="contextMenu">
<ContextMenu.Items>
<MenuItem Header="Select All"
Command="SelectAll">
<MenuItem.Icon>
<Image Source="..\icons\table_select_all.png"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Accept for column"
Click="MenuItem_Click"></MenuItem>
</ContextMenu.Items>
</ContextMenu>
<Style TargetType="{x:Type editors:XamNumericEditor}">
<Setter Property="ContextMenu" Value="{StaticResource contextMenu}"/>
</Style>
</igDP:XamDataGrid.Resources>

或者,您可以使用 EventSetter
<MenuItem Header="Accept for column">
<MenuItem.Style>
<Style TargetType="MenuItem">
<EventSetter Event="Click" Handler="MenuItem_Click"/>
</Style>
</MenuItem.Style>
</MenuItem>

更新

获取 PlacementTarget您需要 ContextMenu .您可以将其作为 CommandParameter 传递
<MenuItem Header="Accept for column"
CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"
Click="MenuItem_Click">
</MenuItem>

private void MenuItem_Click(object sender, RoutedEventArgs e)
{
MenuItem menuItem = sender as MenuItem;
ContextMenu contextMenu = menuItem.CommandParameter as ContextMenu;
var placementTarget = contextMenu.PlacementTarget;
//...
}

关于wpf - 无法将事件处理程序附加到样式中的上下文菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com