using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; namespace EmbyToolbox.Behaviors; /// Всплывает по левому клику вместо ПКМ (split-menu кнопка). public static class ContextMenuOpenOnButtonClickBehavior { public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached( "IsEnabled", typeof(bool), typeof(ContextMenuOpenOnButtonClickBehavior), new PropertyMetadata(false, OnIsEnabledChanged)); public static void SetIsEnabled(Button obj, bool value) => obj.SetValue(IsEnabledProperty, value); public static bool GetIsEnabled(Button obj) => (bool)obj.GetValue(IsEnabledProperty); private static void OnIsEnabledChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { if (d is not Button btn) { return; } btn.Click -= OnButtonClick; if (e.NewValue is true) { btn.Click += OnButtonClick; } } private static void OnButtonClick(object sender, RoutedEventArgs e) { if (sender is not Button btn || btn.ContextMenu is not ContextMenu menu) { return; } menu.PlacementTarget = btn; menu.Placement = PlacementMode.Bottom; menu.IsOpen = true; e.Handled = true; } }