आप क्यों नहीं बस अपने आदेश हैंडलर में इस कोड का उपयोग नहीं करते हैं?
private void MyCommandHandler(){
// Do command's work here
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next);
request.Wrapped = true;
control.MoveFocus(request);
}
मूल रूप से है यही कारण है कि 'टैब' करता है, इसलिए यदि आप भी ऐसा ही है, तो आप बिल्कुल तैयार हैं। (बेशक दिशा रिवर्स यदि आप Shift-Tab के साथ एक कमांड है।
मैं वास्तव में तो जैसे एक विस्तार विधि में इस लिपटे ...
public static class NavigationHelpers{
public static void MoveFocus(this FrameworkElement control, FocusNavigationDirection direction = FocusNavigationDirection.Next, bool wrap = true) {
TraversalRequest request = new TraversalRequest(direction);
request.Wrapped = wrap;
control.MoveFocus(request);
}
}
... पहले कोड अर्थ और भी आसान हो जाता है , इस तरह ...
private void MyCommandHandler(){
// Do command's work here
Control.MoveFocus();
}
... और यदि आप नहीं जानते कि वर्तमान में ध्यान केंद्रित नियंत्रण है, तो आप सिर्फ यह कर सकते हैं ...
(Keyboard.FocusedElement as FrameworkElement).MoveFocus();
उम्मीद है कि यह मदद करता है! यदि ऐसा है, तो अगर आप मुझे वोट देते हैं या स्वीकार किए जाते हैं तो इसे बहुत सराहना की जाती है!
शायद 'लॉस्टफोकस' ईवेंट आपके उद्देश्यों के लिए अधिक उपयुक्त है? (मैं अभी भी आपके प्रश्न को ब्याज के बारे में समझता हूं, इसलिए +1।) – Heinzi
मैंने लॉस्टफोकस में देखा, लेकिन मेरे संपादन के साथ मैं एमवीवीएम का उपयोग कर रहा हूं, मैं वहां कोड नहीं डालना चाहता हूं। – mike
मैं लॉस्टफोकस के बारे में और सोचता हूं, मैं कमांड को लॉस्टफोकस ईवेंट में कैसे बांध सकता हूं? मैं इसे xaml के कोड में कोड डाले बिना, मेरे व्यूमोडेल में केवल एक कमांड के लिए बाध्यकारी के बिना यह करना चाहता हूं। – mike