2

同等の WPF を持たない ActiveX または Windows フォーム コントロールを使用しているため、当然 WindowsFormsHost を使用してこれらのコントロールをホストします。通常は、一般的な機能を実装するためのボタンなどの一般的なコントロールを使用して UserControl を作成します。xaml コードの一部は次のようなものです。

<WindowsFormsHost Name="windowsFormsHost1" >   
    <WindowsFormsHost.ContextMenu>
        <ContextMenu>                    
            <MenuItem Header="_Test1" />
        </ContextMenu>                    
    </WindowsFormsHost.ContextMenu>

    <AxOWC:AxPivotTable x:Name="pivotTable" />        
</WindowsFormsHost>        
....

AxPivotTable は OWC (オフィス Web コンポーネント) コントロールです。別の UserControl では、WindowsFormsHost 内に ReportViewer を追加します。通常、追加した ContextMenu 項目がなくても、AxPivotTable または ReportViewer には既定のコンテキスト メニューがあることに注意してください。

これまでのところ、カスタマイズした ContextMenu はまだ表示されていません (まだデフォルトのものが表示されています)。この質問のおかげで、コード ビハインドとセットでマウス ダウン イベントをキャプチャする必要があることがわかりました。

windowsFormsHost1.ContextMenu.IsOpen = True

コンテキストメニューを表示します(奇妙ですが)。

今私の問題は、この Test1 ContextMenu だけが今ここにあるということです。デフォルトの ContextMenu は表示されなくなります。前述したように、これらの既定のコンテキスト メニューの上にカスタマイズされたものを追加する必要があります。

4

1 に答える 1

0

これは、上記の例の私の「解決策」になります..の子要素にもこれが必要かどうかはわかりませんWindowsFormsHost. これがあなたを助けることを願っています

XAML

<Window x:Class="tete.MainWindow"
        xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
        xmlns="http://schemas.microsoft.com/netfx/2009/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
    <Grid>
        <av:WindowsFormsHost Name="myWFH">
            <wf:ComboBox Name="myCBox">
            <wf:ComboBox.ContextMenu>
                <wf:ContextMenu>
                    <wf:ContextMenu.MenuItems>
                        <wf:MenuItem Text="somet"/>
                    </wf:ContextMenu.MenuItems>
                </wf:ContextMenu>
            </wf:ComboBox.ContextMenu>
        </wf:ComboBox>

    </Grid>
</Window>

コードビハインド

using System.Windows;
using System.Windows.Controls;

namespace tete
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        var child = myWFH.Child as System.Windows.Forms.ComboBox;
        child.ContextMenu.MenuItems.Add(new System.Windows.Forms.MenuItem("my new menuitem"));
        }
    }
}

編集 私は今それがあなたのニーズに合っていることを願っています:)そして私はあなたが何をしたいのかを正しく理解していますToDo

于 2013-03-14T11:07:25.097 に答える