0

WPFウィンドウにボタンがあります。マウスの左クリックと Ctrl+F の両方を押してメッセージを表示したい。XAML でほとんどのコードが必要です。コードは以下の通りです。私の問題は、マウスのクリックは機能しますが、キーを押すことはできないことです。誰でも私を助けてください。前もって感謝します。

MyWindow.xaml

<Window x:Class="Commands_Xaml.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="164,88,0,0" Name="button1" VerticalAlignment="Top" Width="75">
            <Button.CommandBindings>
                <CommandBinding Command="ApplicationCommands.Find" Executed="CommandBinding_Executed"/> 
            </Button.CommandBindings>
            <Button.InputBindings>
                <KeyBinding Key="F" Modifiers="Control" Command="ApplicationCommands.Find"/>
                <MouseBinding MouseAction="LeftClick" Command="ApplicationCommands.Find"/>
            </Button.InputBindings>
        </Button>
    </Grid>
</Window>


MainWindow.xaml.cs

namespace Commands_Xaml
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();            
            //ApplicationCommands.Find.InputGestures.Add(new KeyGesture(Key.F,ModifierKeys.Control));
            //ApplicationCommands.Find.InputGestures.Add(new MouseGesture(MouseAction.LeftClick));

            //CommandBinding bindingObject = new CommandBinding();
            //bindingObject.Command = ApplicationCommands.Find;
            //bindingObject.Executed += new ExecutedRoutedEventHandler(CommandBinding_Executed);
            //this.CommandBindings.Add(bindingObject);
        }

        private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            MessageBox.Show("Button clicked");
        }
    }
}
4

1 に答える 1

3

コマンド バインディング/入力バインディングをウィンドウ レベルに移動し、MouseBinding を使用する代わりに、ボタンの Command プロパティを使用します。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">

    <Window.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Find" Executed="CommandBinding_Executed" />
    </Window.CommandBindings>
    <Window.InputBindings>
        <KeyBinding Command="ApplicationCommands.Find" Key="F" Modifiers="Control" />
    </Window.InputBindings>

    <Grid>
        <Button Command="ApplicationCommands.Find" Content="Button" HorizontalAlignment="Left" Margin="206,152,0,0" VerticalAlignment="Top" Width="75"/>
    </Grid>
</Window>

アップデート

ボタンのクリックごとに異なる動作をさせるには、いくつかの方法があります。ここに2つあります:

ボタンごとに異なるコマンドを使用します。

<Button Command="ApplicationCommands.Find" Content="Button1" />
<Button Command="ApplicationCommands.Print" Content="Button2" />

CommandParameterを使用します。

<Button Command="ApplicationCommands.Find" CommandParameter="Find1" Content="Button1" />
<Button Command="ApplicationCommands.Find" CommandParameter="Find2" Content="Button2" />

KeyBinding の場合:

<KeyBinding Command="ApplicationCommands.Find" CommandParameter="Find3" />

CommandBinding.Executed ハンドラーでこのプロパティにアクセスできます。

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
    if (e.Parameter as string == "Find1")
    {
        //Find1
    }
    else if (e.Parameter as string == "Find2")
    {
        //Find2
    }    
    else if (e.Parameter as string == "Find3")
    {
        //Find3
    }
}
于 2012-12-04T19:36:57.957 に答える