2

次のクラスはから派生しSystem.Windows.Controls.UserControlます。上記のクラスではOpenFileDialog、XAMLファイル(ワークフローファイル)を開くために呼び出します。次に、マウスを右クリックしたときに動的メニューを実装します。メニューが表示されません。これはスレッドの問題ですか、それともUIの問題ですか?私の研究では、解決策を見つけることができませんでした。

前もって感謝します。

private void File_Open_Click(object sender, RoutedEventArgs e)
{
    var fileDialog = new OpenFileDialog();

    fileDialog.Title  = "Open Workflow";
    fileDialog.Filter = "Workflow| *.xaml";

    if (fileDialog.ShowDialog() == DialogResult.OK)
    {
        LoadWorkflow(fileDialog.FileName);
        MouseDown += new System.Windows.Input.MouseButtonEventHandler(mouseClickedResponse);
     }
}

private void mouseClickedResponse(object sender, System.Windows.Input.MouseEventArgs e)
{
    if (e.RightButton == MouseButtonState.Pressed)
    {
         LoadMenuItems();
    }
}

private void LoadMenuItems()
{
    System.Windows.Controls.ContextMenu contextmenu = new System.Windows.Controls.ContextMenu();   
    System.Windows.Controls.MenuItem item1 = new System.Windows.Controls.MenuItem();
    item1.Header = "A new Test";
    contextmenu.Items.Add(item1);
    this.ContextMenu = contextmenu;
    this.ContextMenu.Visibility = Visibility.Visible;
}
4

3 に答える 3

0

ContextMenu のShow(Control, Point)メソッドを呼び出す必要があります。さらに、コントロールがクリックされるたびに新しいコンテキスト メニューをインスタンス化するのではなく、次のようなことを行います。

MyClass()
{
     // create the context menu in the constructor:

     this.ContextMenu = new System.Windows.Forms.ContextMenu();   
     System.Windows.Forms.MenuItem item1 = new System.Windows.Forms.MenuItem();
     item1.Text = "A new Test";
     this.ContextMenu.Items.Add(item1);
}


private void mouseClickedResponse(object sender, System.Windows.Input.MouseEventArgs e)
{
    if (e.RightButton == MouseButtonState.Pressed)
    {
          // show the context menu as soon as the right mouse button is pressed
          this.ContextMenu.Show(this, e.Location);
    }
}
于 2012-08-23T20:41:40.920 に答える
-1

電話する必要があると思いますcontextMenu.Show

于 2012-08-23T20:27:18.407 に答える