private void radioButton_OnClick(object sender, RoutedEventArgs args) { foreach (var child in XChildren) { if (child is RadioButton && child != sender) { ((RadioButton) child).Checked = false; } } ((RadioButton) sender).Checked = true; int index = Children.IndexOf((Control) sender); SelectedItemIndex = index; }
/// <summary> /// Adds specified routed event to event queue. This event will be processed in next pass. /// </summary> internal void QueueEvent(RoutedEvent routedEvent, RoutedEventArgs args) { if (routedEvent != args.RoutedEvent) throw new ArgumentException("Routed event doesn't match to routedEvent passed.", "args"); this.eventsQueue.Enqueue(args); }
private bool processRoutedEvent(RoutedEvent routedEvent, RoutedEventArgs args) { // List<RoutedEventTargetInfo> subscribedTargets = getTargetsSubscribedTo(routedEvent); Control capturingControl = inputCaptureStack.Count != 0 ? inputCaptureStack.Peek() : null; // if (routedEvent.RoutingStrategy == RoutingStrategy.Direct) { if (null == subscribedTargets) return false; // RoutedEventTargetInfo targetInfo = subscribedTargets.FirstOrDefault(info => info.target == args.Source); if (null == targetInfo) return false; // если имеется контрол, захватывающий события, события получает только он сам // и его дочерние контролы if ( capturingControl != null ) { if ( !(args.Source is Control) ) return false; if ( !isControlAllowedToReceiveEvents( ( Control ) args.Source, capturingControl ) ) return false; } // copy handlersList to local list to avoid modifications when enumerating foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) { if (!args.Handled || delegateInfo.handledEventsToo) { if (delegateInfo.@delegate is RoutedEventHandler) { ((RoutedEventHandler) delegateInfo.@delegate).Invoke(targetInfo.target, args); } else { [email protected](targetInfo.target, args); } } } } Control source = (Control) args.Source; // path to source from root element down to Source List<Control> path = new List<Control>(); Control current = source; while (null != current) { // та же логика с контролом, захватившим обработку сообщений // если имеется контрол, захватывающий события, события получает только он сам // и его дочерние контролы if ( capturingControl == null || isControlAllowedToReceiveEvents( current, capturingControl ) ) { path.Insert( 0, current ); current = current.Parent; } else { break; } } if (routedEvent.RoutingStrategy == RoutingStrategy.Tunnel) { if (subscribedTargets != null) { foreach (Control potentialTarget in path) { Control target = potentialTarget; RoutedEventTargetInfo targetInfo = subscribedTargets.FirstOrDefault(info => info.target == target); if (null != targetInfo) { foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) { if (!args.Handled || delegateInfo.handledEventsToo) { if (delegateInfo.@delegate is RoutedEventHandler) { ((RoutedEventHandler) delegateInfo.@delegate).Invoke(target, args); } else { [email protected](target, args); } } } } } } // для парных Preview-событий запускаем соответствующие настоящие события, // сохраняя при этом Handled (если Preview событие помечено как Handled=true, // то и настоящее событие будет маршрутизировано с Handled=true) if (routedEvent == Control.PreviewMouseDownEvent) { MouseButtonEventArgs mouseArgs = ( ( MouseButtonEventArgs ) args ); MouseButtonEventArgs argsNew = new MouseButtonEventArgs( args.Source, Control.MouseDownEvent, mouseArgs.RawPosition, mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton, mouseArgs.ChangedButton ); argsNew.Handled = args.Handled; eventsQueue.Enqueue(argsNew); } if (routedEvent == Control.PreviewMouseUpEvent) { MouseButtonEventArgs mouseArgs = ( ( MouseButtonEventArgs ) args ); MouseButtonEventArgs argsNew = new MouseButtonEventArgs( args.Source, Control.MouseUpEvent, mouseArgs.RawPosition, mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton, mouseArgs.ChangedButton ); argsNew.Handled = args.Handled; eventsQueue.Enqueue(argsNew); } if (routedEvent == Control.PreviewMouseMoveEvent) { MouseEventArgs mouseArgs = ( ( MouseEventArgs ) args ); MouseEventArgs argsNew = new MouseEventArgs( args.Source, Control.MouseMoveEvent, mouseArgs.RawPosition, mouseArgs.LeftButton, mouseArgs.MiddleButton, mouseArgs.RightButton ); argsNew.Handled = args.Handled; eventsQueue.Enqueue(argsNew); } if ( routedEvent == Control.PreviewMouseWheelEvent ) { MouseWheelEventArgs oldArgs = ((MouseWheelEventArgs)args); MouseEventArgs argsNew = new MouseWheelEventArgs( args.Source, Control.MouseWheelEvent, oldArgs.RawPosition, oldArgs.LeftButton, oldArgs.MiddleButton, oldArgs.RightButton, oldArgs.Delta ); argsNew.Handled = args.Handled; eventsQueue.Enqueue(argsNew); } if (routedEvent == Control.PreviewKeyDownEvent) { KeyEventArgs argsNew = new KeyEventArgs(args.Source, Control.KeyDownEvent); KeyEventArgs keyEventArgs = ( ( KeyEventArgs ) args ); argsNew.UnicodeChar = keyEventArgs.UnicodeChar; argsNew.bKeyDown = keyEventArgs.bKeyDown; argsNew.dwControlKeyState = keyEventArgs.dwControlKeyState; argsNew.wRepeatCount = keyEventArgs.wRepeatCount; argsNew.wVirtualKeyCode = keyEventArgs.wVirtualKeyCode; argsNew.wVirtualScanCode = keyEventArgs.wVirtualScanCode; argsNew.Handled = args.Handled; eventsQueue.Enqueue(argsNew); } if (routedEvent == Control.PreviewKeyUpEvent) { KeyEventArgs argsNew = new KeyEventArgs(args.Source, Control.KeyUpEvent); KeyEventArgs keyEventArgs = ( ( KeyEventArgs ) args ); argsNew.UnicodeChar = keyEventArgs.UnicodeChar; argsNew.bKeyDown = keyEventArgs.bKeyDown; argsNew.dwControlKeyState = keyEventArgs.dwControlKeyState; argsNew.wRepeatCount = keyEventArgs.wRepeatCount; argsNew.wVirtualKeyCode = keyEventArgs.wVirtualKeyCode; argsNew.wVirtualScanCode = keyEventArgs.wVirtualScanCode; argsNew.Handled = args.Handled; eventsQueue.Enqueue(argsNew); } } if (routedEvent.RoutingStrategy == RoutingStrategy.Bubble) { if (subscribedTargets != null) { for (int i = path.Count - 1; i >= 0; i--) { Control target = path[i]; RoutedEventTargetInfo targetInfo = subscribedTargets.FirstOrDefault(info => info.target == target); if (null != targetInfo) { // foreach (DelegateInfo delegateInfo in new List< DelegateInfo >(targetInfo.handlersList)) { if (!args.Handled || delegateInfo.handledEventsToo) { if (delegateInfo.@delegate is RoutedEventHandler) { ((RoutedEventHandler) delegateInfo.@delegate).Invoke(target, args); } else { [email protected](target, args); } } } } } } } return args.Handled; }
// todo : think about remove it internal bool ProcessRoutedEvent(RoutedEvent routedEvent, RoutedEventArgs args) { if (null == routedEvent) throw new ArgumentNullException("routedEvent"); if (null == args) throw new ArgumentNullException("args"); // return processRoutedEvent(routedEvent, args); }
private void CheckBox_OnClick( object sender, RoutedEventArgs routedEventArgs ) { Checked = !Checked; }