2

コンテキスト メニューを wpf コントロールにアタッチし、(より慣習的な右クリックではなく) 左クリックで開くことは可能ですか? xaml のみを使用してそれを実現したい (これは、コントロールのビュー テンプレートの一部である必要があります)。

4

3 に答える 3

7

左クリックでコンテキストメニューを表示する方法は次のとおりです。

Border要素に新しい左ボタン ハンドラーを作成します。

<Border x:Name="Win"
        Width="40"
        Height="40"
        Background="Purple"
        MouseLeftButtonUp="UIElement_OnMouseLeftButtonUp">

そして、これを追加します:

private void UIElement_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    e.Handled = true;

    var mouseDownEvent =
        new MouseButtonEventArgs(Mouse.PrimaryDevice,
            Environment.TickCount,
            MouseButton.Right)
        {
            RoutedEvent = Mouse.MouseUpEvent,
            Source = Win,
        };


    InputManager.Current.ProcessInput(mouseDownEvent);
}

それが何をするか、それは基本的に左クリックを右クリックにマップします。再利用性のために、これをアタッチされた動作にラップできます。

于 2014-12-29T18:43:04.570 に答える
4

これが私が提案していることの簡単な例をどのように行うかです:

XAML:

<Window x:Class="LeftClickMenu.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow">
    <Grid>
        <Border Width="400" Height="300" Background="#ccc" BorderBrush="#333" 
                BorderThickness="1"
                MouseLeftButtonDown="Border_MouseLeftButtonDown"
                MouseRightButtonUp="Border_MouseRightButtonUp">
            <Border.ContextMenu>
                <ContextMenu x:Name="myContextMenu">
                    <MenuItem Header="Menu Item 1" />
                    <MenuItem Header="Menu Item 2" />
                    <MenuItem Header="Menu Item 3" />
                    <MenuItem Header="Menu Item 4" />
                    <MenuItem Header="Menu Item 5" />
                </ContextMenu>
            </Border.ContextMenu>
        </Border>
    </Grid>
</Window>

そして、コードビハインド:

using System.Windows;
using System.Windows.Input;

namespace LeftClickMenu
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            myContextMenu.IsOpen = true;
        }

        private void Border_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
        {
            e.Handled = true;
        }
    }
}

また、コンテキストメニューの右クリックポップアップを禁止するために、MouseRightButtonUpイベントを追加しました。

于 2012-07-19T21:45:46.450 に答える
0
  1. この SO 記事に記載されているように、プログラムでサブメニューを開くメソッドを作成します: WPF でプログラムによってメニューを表示する

  2. LeftMouseButtonDown のイベントを作成し、XAML でそのイベントを呼び出します。

于 2012-07-17T00:59:03.733 に答える