private void ElementClicked(object sender, EventArgs args) { var button = sender as System.Windows.Controls.Button; if (button == null) return; var binding = button.Tag as KeyBindingControl; System.Windows.Controls.Border border; if (binding != null && Equals(binding, mCurrentBinding)) { border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border; if(border != null) border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0)); mCurrentBinding = null; return; } if (binding == null) return; if (mCurrentBinding != null) { border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border; if (border != null) border.BorderBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0)); } border = binding.Label.Parent as System.Windows.Controls.Border; if (border != null) border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0)); mCurrentBinding = binding; mCurrentKeys.Clear(); }
private void UserControl_Loaded(object sender, RoutedEventArgs e) { SensitivitySliderIndicator.Text = (SensitivitySlider.Value / 5.0f).ToString("F2"); if (mInitialized) { return; } mInitialized = true; KeyDown += OnKeyDown; KeyUp += OnKeyUp; var baseType = typeof(KeyBindings); foreach (var category in baseType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { var catName = category.Name; var instance = category.GetValue(KeyBindings.Instance); foreach (var binding in instance.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance)) { if (binding.FieldType.IsArray == false) { continue; } var arrType = binding.FieldType.GetElementType(); if (arrType != typeof(Keys)) { continue; } var elemName = binding.Name; var keys = (Keys[])binding.GetValue(instance); var control = new KeyBindingControl { Tag = new Tuple <FieldInfo, object>(binding, instance), Button = { Content = string.Format("{0}.{1}", catName, elemName) }, Label = { Text = string.Join(" + ", keys.Select(k => Converter.ConvertToString(k))) } }; control.Button.Tag = control; control.Button.Click += ElementClicked; InputElementWrapper.Children.Add(control); } } }
private void ElementClicked(object sender, EventArgs args) { var button = sender as System.Windows.Controls.Button; if (button == null) { return; } var binding = button.Tag as KeyBindingControl; System.Windows.Controls.Border border; if (binding != null && Equals(binding, mCurrentBinding)) { border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border; if (border != null) { border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0)); } mCurrentBinding = null; return; } if (binding == null) { return; } if (mCurrentBinding != null) { border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border; if (border != null) { border.BorderBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0)); } } border = binding.Label.Parent as System.Windows.Controls.Border; if (border != null) { border.BorderBrush = new SolidColorBrush(Color.FromRgb(255, 0, 0)); } mCurrentBinding = binding; mCurrentKeys.Clear(); }
private void OnKeyUp(object sender, System.Windows.Input.KeyEventArgs args) { if (mCurrentBinding == null) return; mCurrentPressedKeys.Remove(args.Key); if (mCurrentPressedKeys.Count != 0) return; var border = mCurrentBinding.Label.Parent as System.Windows.Controls.Border; if (border != null) border.BorderBrush = new SolidColorBrush(Color.FromRgb(0, 0, 0)); var bindField = mCurrentBinding.Tag as Tuple<FieldInfo, object>; if (bindField != null && mCurrentKeys.Count > 0) { bindField.Item1.SetValue(bindField.Item2, mCurrentKeys.Select(k => (Keys)KeyInterop.VirtualKeyFromKey(k)).ToArray()); KeyBindings.Save(); } mCurrentBinding = null; }
private void UserControl_Loaded(object sender, RoutedEventArgs e) { SensitivitySliderIndicator.Text = (SensitivitySlider.Value / 5.0f).ToString("F2"); if (mInitialized) return; mInitialized = true; KeyDown += OnKeyDown; KeyUp += OnKeyUp; var baseType = typeof(KeyBindings); foreach (var category in baseType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { var catName = category.Name; var instance = category.GetValue(KeyBindings.Instance); foreach (var binding in instance.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance)) { if (binding.FieldType.IsArray == false) continue; var arrType = binding.FieldType.GetElementType(); if (arrType != typeof(Keys)) continue; var elemName = binding.Name; var keys = (Keys[])binding.GetValue(instance); var control = new KeyBindingControl { Tag = new Tuple<FieldInfo, object>(binding, instance), Button = { Content = string.Format("{0}.{1}", catName, elemName) }, Label = { Text = string.Join(" + ", keys.Select(k => Converter.ConvertToString(k))) } }; control.Button.Tag = control; control.Button.Click += ElementClicked; InputElementWrapper.Children.Add(control); } } }