WPF部分控件没有点击事件,点击,指的是鼠标按下,然后抬起,形成一次点击,这里写了个类,实现了点击事件如下
class ClickEventAction{static List<ClickEventAction> clickEventActions = new List<ClickEventAction>();public static void AddClickEventAction(FrameworkElement frameworkElement, Action<object> action = null){if (frameworkElement == null) return;clickEventActions.Add(new ClickEventAction(frameworkElement, action));}public static void RemoveClickEventAction(FrameworkElement frameworkElement){foreach (ClickEventAction item in clickEventActions){if(item.FrameworkElement == frameworkElement){item.FrameworkElement.MouseLeave -= item.UIElement_MouseLeave;item.FrameworkElement.MouseLeftButtonUp -= item.UIElement_MouseLeftButtonUp;item.FrameworkElement.MouseLeftButtonDown -= item.UIElement_MouseLeftButtonDown;item.FrameworkElement.MouseEnter -= item.FrameworkElement_MouseEnter;}}}public ClickEventAction(FrameworkElement frameworkElement, Action<object> action = null){FrameworkElement = frameworkElement;Action = action;frameworkElement.MouseLeftButtonDown += UIElement_MouseLeftButtonDown;frameworkElement.MouseLeftButtonUp += UIElement_MouseLeftButtonUp;frameworkElement.MouseLeave += UIElement_MouseLeave;frameworkElement.MouseEnter += FrameworkElement_MouseEnter;}private Brush background = null;public void FrameworkElement_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e){}private bool isMouseDown = false;public void UIElement_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e){isMouseDown = false;}public void UIElement_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e){if (isMouseDown)Action?.Invoke(FrameworkElement);isMouseDown = false;}public void UIElement_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e){isMouseDown = true;}public Action<object> Action { get; set; }public FrameworkElement FrameworkElement { get; set; }}
使用方式,后台调用该类添加点击事件,Click为响应事件的方法
ClickEventAction.AddClickEventAction(TableBorder, Click);private void Click(object obj){if(obj is FrameworkElement framework){switch (framework.Name){default:break;}}}