은 무엇 몇 가지 예제 코드를 것 그 것이다 트랩 WPF 응용 프로그램에 대한 Ctrl 키 + 탭 및 Ctrl 키 + 시프트 + 탭?WPF에서 Ctrl + Tab 및 Ctrl + Shift + Tab을 캡처하는 방법은 무엇입니까?
KeyDown
이벤트를 생성했으며 입력 제스처가있는 명령 바인딩을 추가하려고 시도했지만 이러한 두 가지 바로 가기를 트래핑 할 수 없었습니다.
은 무엇 몇 가지 예제 코드를 것 그 것이다 트랩 WPF 응용 프로그램에 대한 Ctrl 키 + 탭 및 Ctrl 키 + 시프트 + 탭?WPF에서 Ctrl + Tab 및 Ctrl + Shift + Tab을 캡처하는 방법은 무엇입니까?
KeyDown
이벤트를 생성했으며 입력 제스처가있는 명령 바인딩을 추가하려고 시도했지만 이러한 두 가지 바로 가기를 트래핑 할 수 없었습니다.
어떤 KeyDown 처리기를 사용 했습니까? 아래 코드는 나를 위해 작동합니다. Alt 키 + 탭,하지만 당신은 요구하지 않았다 : 나에게 문제를 제공 한은 D 당신은 KeyUp
이벤트,하지 KeyDown
를 사용할 필요가
public Window1()
{
InitializeComponent();
AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent);
}
private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
{
MessageBox.Show("CTRL + SHIFT + TAB trapped");
}
if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
MessageBox.Show("CTRL + TAB trapped");
}
}
...
흥미 롭습니다. 이것을 시도하지 않았지만 이유를 설명해 주시겠습니까? –
Sure Siz. 동시에 2 개 이상의 키 스트로크를 캡처하려고하면 한 번에 하나의 키를 캡처하기 때문에 e.Key에 대한 KeyDown 검사를 사용할 수 없습니다. KeyDown이 필요한 경우, 예를 들어 사용자가 키 조합을 누른 상태에서 작업을 수행하는 것과 같이 KeyDown과 Keyboard 클래스, 특히 IsKeyDown()을 사용하여 특정 키를 테스트해야합니다. –
죄송합니다, 여기서 뭐라고 말하려고하는지 이해하지 못합니다. KeyUp 이벤트는 e.Key의 단일 키 값만 전달합니다. KeyDown 대신 KeyUp을 처리하면 "동시에 두 번 이상의 키 입력을 캡처"하는 것이 더 좋은 특정 예제를 제공 할 수 있습니까? 감사. –
구스타보의 대답은 제가 찾고있는 것이 었습니다. 인 Szymon Rozga 대답의 버전을 (근무
private void OnButtonKeyDown(object sender, KeyEventArgs e)
{
if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift))
{
//
// TODO: somthing here
//
}
}
슬프게도 사용자가 올바른 ctrl 버튼을 사용할 때 슬픈 듯이 처리하지 않습니다 :-) –
안녕 당신이를 keyDown 이벤트에 이것을 사용할 수 있습니다 : 우리는 붙여 넣기를 허용 여전히 입력 키의 유효성을 검사하지만, 할). 우리의 WPF에 대한 작업을 수행하는 ... 우리는 Alt 키에 보이지 않는, 그러나 단순히 처음 경우
public View()
{
InitializeComponent();
AddHandler(Keyboard.PreviewKeyDownEvent, (KeyEventHandler)controlKeyDownEvent);
}
private void controlKeyDownEvent(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab && Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
{
if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
MessageBox.Show("CTRL + SHIFT + TAB trapped");
else
MessageBox.Show("CTRL + TAB trapped");
}
}
죄송합니다, 제가 말씀 드릴 수 없습니다
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
return;
}
SIZ, 덕분에 추가 할 수 있습니다 차지합니다. 우리는 또한 XBAP를 가지고 있으며 XBAP에서 작동하지 않습니다. XBAP와 함께이 작업을 수행하는 방법에 대한 아이디어가 있습니까? – FarrEver
그것을 할 xamly 방법이 있습니까? – Shimmy
@siz 다음 문법을 사용하여 If 문을 정리할 수 있습니다 :'Keyboard.Modifiers.HasFlag (ModifierKeys.Control)' – Pakman