اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
یک دقیقه
کاربران بیشتر برنامههای فارسی تمایل دارند که توسط کلیدEnter درون فرمها حرکت کنند.در برنامههای WPF و مخصوصا زمانی که شما از الگوی MVVM استفاده میکنید ،انجام این کار اگر از روشهای مناسب استفاده نکنید تا حدودی سخت میشود.
اما همانطور که در عنوان مطلب آورده شده است در این مطلب تصمیم دارم حرکت روی سلولهای دیتا گرید توسط کلید Enter را شرح بدهم.
برای حرکت روی TextBoxها و کنترلهای مشابه میتوانید این کار را به راحتی با Register کردن رویداد مربوط به آن نوع کنترلها توسط EventManager یک بار در ابتدای برنامه انجام دهید.
public partial class App : Application { EventManager.RegisterClassHandler(typeof(TextBox), TextBox.KeyDownEvent, new KeyEventHandler(TextBox_KeyDown)); ... } private void TextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key != Key.Enter) return; var focusedElement = Keyboard.FocusedElement as TextBox; focusedElement.MoveFocus(new TraversalRequest(FocusNavigationDirection .Next)); }
برای این کار نیز یک راه حل ساده وجود دارد و آن شبیه سازی فراخوانی کلید Tab هنگام فشرده شدن کلید Enter است.چون همانطور که میدانید کلید Tab به صورت پیش فرض حرکت روی سلولها را انجام میدهد.برای انجام آن کافی ست دیتاگرید خود را سفارشی کرده و در متد OnPreviewKeyDown عملیات زیر را انجام دهید:
public class CommonDataGrid : DataGrid { protected override void OnPreviewKeyDown(KeyEventArgs e) { base.OnPreviewKeyDown(e); if (e.Key != Key.Enter || Keyboard.PrimaryDevice.ActiveSource == null) return; this.CommitEdit(); var args = new KeyEventArgs (Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent }; InputManager.Current.ProcessInput(args); } }