Dmi*_*riy 11 wpf xaml infragistics styles event-handling
我试图修改默认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>
Run Code Online (Sandbox Code Playgroud)
代码隐藏文件包含此MenuItem的事件hadler:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但是当我启动它时,我捕获一个带有消息的异常: 无法将类型为'System.Windows.Controls.MenuItem'的对象强制转换为'System.Windows.Controls.ContextMenu'.
你能帮帮我吗?谢谢.
Fre*_*lad 13
尝试添加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>
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 EventSetter
<MenuItem Header="Accept for column">
<MenuItem.Style>
<Style TargetType="MenuItem">
<EventSetter Event="Click" Handler="MenuItem_Click"/>
</Style>
</MenuItem.Style>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
更新
为了得到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;
//...
}
Run Code Online (Sandbox Code Playgroud)