簡體   English   中英

在ContextMenuOpening中找不到上下文菜單

[英]Can't find context menu in ContextMenuOpening

我試圖根據所選行的數據上下文替換上下文菜單中的標題。

觸發ContextMenuOpening,但隨后無法從那里找到上下文菜單。

<UserControl ContextMenuOpening="AddItemHeader">
  <UserControl.Resources>
    <ContextMenu x:Key="RowMenu" DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}">
        <MenuItem Header="&lt;to be set>"
                  Tag="delete menu item"
                  Click="MarkForDeletion">
        </MenuItem>
        [...]
    </ContextMenu>
    <Style x:Key="DefaultRowStyle" TargetType="{x:Type DataGridRow}">
        <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
    </Style>
  </UserControl.Resources>

<DataGrid.RowStyle>
  <Style TargetType="{x:Type DataGridRow}">
    <Setter Property="ContextMenu" Value="{StaticResource RowMenu}" />
    [...]

private void AddItemHeader(object sender, ContextMenuEventArgs e)
{
    Console.WriteLine("ContextMenuOpening fired.");

        FrameworkElement fe = e.Source as FrameworkElement;
        ContextMenu menu = fe.ContextMenu;

        if (menu == null)
        {
            Console.WriteLine("Menu not found!");
            return;
        }

        MenuItem menuItem = null;

        foreach (MenuItem mi in menu.Items) {
            if ((string)mi.Tag == "to be set") {
                menuItem = mi;
            }
        }

        if (menuItem == null) {
            return;
            Console.WriteLine("Item not found!");
        }
}

只是輸出“找不到菜單!”

您正在將上下文菜單設置為每一行。 您找不到上下文菜單,因為ContextMenuOpening的發送者可能是網格而不是行。

我將上下文菜單分配給datagrid,並在每個菜單項的事件處理程序中使用datagrid的selecteditem。

嘗試這個:

var rowIndex = dataGrid.SelectedIndex;
var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(selectedIndex);
ContextMenu cm = row.ContextMenu;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM