C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: KeyBinding の設定


(過去ログ 118 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■69229 / inTopicNo.1)  KeyBinding の設定
  
□投稿者/ くぅ (3回)-(2013/12/10(Tue) 14:12:03)

分類:[.NET 全般] 

VS2010
c#

xamlにて、

<KeyBinding Gesture="Ctrl+C" Command="実行したいコマンド" />
<KeyBinding Gesture="Delete" Command="実行したいコマンド" />
<KeyBinding Gesture="Right" Command="実行したいコマンド" />

と記述しています。
テストなので、実行したいコマンドは同じものを指定しています。

"Ctrl+C" と ="Delete" は検出されて、実行したいコマンドに処理が移行するのですが、
右方向キー(「→」キー)が検出されず、実行したいコマンドに処理が移行しません。

左右の方向キーは設定方法が違うのでしょうか?
引用返信 編集キー/
■69264 / inTopicNo.2)  Re[1]: KeyBinding の設定
□投稿者/ くぅ (4回)-(2013/12/13(Fri) 10:06:59)
調べてみましたがヒントが見つかっていません。
お分かりの方いらっしゃいましたら、よろしくお願いいたします。
引用返信 編集キー/
■69265 / inTopicNo.3)  Re[2]: KeyBinding の設定
□投稿者/ an (15回)-(2013/12/13(Fri) 11:16:06)
No69264 (くぅ さん) に返信
> 調べてみましたがヒントが見つかっていません。
> お分かりの方いらっしゃいましたら、よろしくお願いいたします。

※当方、WPFは今回初めて使い、WPFおよびKeyBinding関連の処理等を
 理解せずに作成したので参考まで。


以下のページを参考にし、
以下のソースコードを作成し、実行したところ、
5種類のキー操作に対し、正常に動作しました。

【環境】
OS:Windows8.1
VisualStudio2008StandardEdition

【参考サイト】
http://d.hatena.ne.jp/hilapon/20110324/1300937847

【Window1.xaml】
<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.CommandBindings>
        <CommandBinding Command="Close" Executed="Execute1" />
    </Window.CommandBindings>
    <Window.InputBindings>
        <KeyBinding Gesture="Ctrl+C" Command="Close" />
        <KeyBinding Gesture="Delete" Command="Close" />
        <KeyBinding Gesture="Right" Command="Close" />
        <KeyBinding Gesture="Ctrl+Right" Command="Close" />
        <KeyBinding Gesture="Alt+Shift+Right" Command="Close" />
    </Window.InputBindings>
    <Grid>
    </Grid>
</Window>

【Window1.xaml.cs】
using System;
using System.Windows;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
        private void Execute1(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Execute1が実行されました。");
        }
    }
}
===ここまで=====


環境が違うので微妙ではありますが、
提示している箇所は同じにして動作させてうまくいったので、
提示していない箇所に問題があるのではないでしょうか?
もう少し、広くソースコードを提示してはどうでしょうか?

また、ミニマムコードを作成し、検証してみてはいかがでしょうか?

引用返信 編集キー/
■69267 / inTopicNo.4)  Re[3]: KeyBinding の設定
□投稿者/ Hongliang (139回)-(2013/12/13(Fri) 11:43:38)
おそらく、キーボードフォーカスのある要素からウィンドウまでの間のKeyDownイベントのバブルアップ中のどこかで処理済みとマークされたのだと思われます。
// バブルアップとか処理済みとかについてはルーティングイベントを調べてみて下さい。

強引な解決としては、ウィンドウの子要素に対して、AddHandlerメソッドで第三引数handledEventsTooにtrueを指定してイベントハンドラを登録し、
その登録するイベントハンドラ内でe.Handled = falseと処理済みマークを無理矢理外すという方法を思いつきましたが、動作がおかしくなる可能性があります。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -