簡體   English   中英

如何在WPF中使用ContextMenu UserControl?

[英]How to use a ContextMenu UserControl in WPF?

我有這樣的用戶控件:

<UserControl x:Class="MyApp.UserControls.MyContextMenu"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d"
             ContextMenuOpening="OnContextMenuOpening"
             d:DesignHeight="300" d:DesignWidth="300">

    <UserControl.ContextMenu>
        <ContextMenu>
        ...
        </ContextMenu>
    </UserControl.ContextMenu>
</UserControl>

我的問題是:如何將該上下文菜單用於數據網格:

<DataGrid ContextMenu="{usercontrols:MyContextMenu}"

不幸的是,這不起作用,因為指定的值不正確並且預期是ContextMenu

注意:我需要在幾個地方重用我的上下文菜單,所以我把它放在自己的文件中。 此外,我需要能夠收聽OnContextMenuOpening事件,因為打開時的菜單需要對菜單做一些工作,並且不會為上下文菜單觸發事件: http//connect.microsoft.com/VisualStudio/反饋/信息/ 353112 /文本菜單打開-事件犯規火,正確

“ContextMenu本身是一個FrameworkElement派生類,但不會從作為源打開的上下文菜單中引發此事件。該事件是從”擁有“上下文菜單作為屬性的元素引發的,僅在用戶引發時才會引發嘗試在UI中打開上下文菜單。“

此事件問題是我為用戶控件放置菜單的原因 - 以便用戶控件可以獲取事件並完成工作。

更新:我嘗試將其作為根元素並擴展上下文菜單:

在此輸入圖像描述

代碼隱藏:

在此輸入圖像描述

但我得到: ContextMenu cannot have a logical or visual parent

無論您如何調用UserControl,它都不是ContextMenu。 您必須從ContextMenu而不是UserControl派生:

<ContextMenu x:Class="MyApp.MyContextMenu"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <MenuItem Header="Item 1"/>
    <MenuItem Header="Item 2"/>
    ...
</ContextMenu>

public partial class MyContextMenu : ContextMenu
{
    public MyContextMenu()
    {
        InitializeComponent();
    }
}

但是你為什么要這樣做呢?

嘗試定義如下:

<DataGrid.Resources>
    <ContextMenu x:Key="DgContextMenu">
      ...
    </ContextMenu>
</DataGrid.Resources>

在使用之后就像

<DataGrid ContextMenu="{StaticResource DgContextMenu}

應該工作。

暫無
暫無

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

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