first commit
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Interactivity;
|
||||
|
||||
namespace ClassicAssist.UI.Misc
|
||||
{
|
||||
public class ComboBoxBehavior : Behavior<ComboBox>
|
||||
{
|
||||
public static readonly DependencyProperty CommandBindingProperty =
|
||||
DependencyProperty.Register( "CommandBinding", typeof( ICommand ), typeof( ComboBoxBehavior ),
|
||||
new FrameworkPropertyMetadata( default( ICommand ), FrameworkPropertyMetadataOptions.None,
|
||||
PropertyChangedCallback ) );
|
||||
|
||||
public static readonly DependencyProperty CommandParameterProperty =
|
||||
DependencyProperty.Register( "CommandParameter", typeof( object ), typeof( ComboBoxBehavior ),
|
||||
new FrameworkPropertyMetadata( default, FrameworkPropertyMetadataOptions.None,
|
||||
PropertyChangedCallback ) );
|
||||
|
||||
public static readonly DependencyProperty OnlyUserTriggeredProperty =
|
||||
DependencyProperty.Register( "OnlyUserTriggered", typeof( bool ), typeof( ComboBoxBehavior ),
|
||||
new FrameworkPropertyMetadata( false, FrameworkPropertyMetadataOptions.None,
|
||||
PropertyChangedCallback ) );
|
||||
|
||||
private bool _userTriggered;
|
||||
|
||||
public ICommand CommandBinding
|
||||
{
|
||||
get => (ICommand) GetValue( CommandBindingProperty );
|
||||
set => SetValue( CommandBindingProperty, value );
|
||||
}
|
||||
|
||||
public object CommandParameter
|
||||
{
|
||||
get => GetValue( CommandParameterProperty );
|
||||
set => SetValue( CommandParameterProperty, value );
|
||||
}
|
||||
|
||||
public bool OnlyUserTriggered
|
||||
{
|
||||
get => (bool) GetValue( OnlyUserTriggeredProperty );
|
||||
set => SetValue( OnlyUserTriggeredProperty, value );
|
||||
}
|
||||
|
||||
private static void PropertyChangedCallback( DependencyObject d, DependencyPropertyChangedEventArgs e )
|
||||
{
|
||||
}
|
||||
|
||||
protected override void OnAttached()
|
||||
{
|
||||
base.OnAttached();
|
||||
|
||||
AssociatedObject.SelectionChanged += OnSelectionChanged;
|
||||
AssociatedObject.PreviewMouseDown += OnPreviewMouseDown;
|
||||
}
|
||||
|
||||
private void OnPreviewMouseDown( object sender, MouseButtonEventArgs e )
|
||||
{
|
||||
_userTriggered = true;
|
||||
}
|
||||
|
||||
private void OnSelectionChanged( object sender, SelectionChangedEventArgs e )
|
||||
{
|
||||
if ( OnlyUserTriggered && !_userTriggered )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
CommandBinding?.Execute( AssociatedObject.SelectedItem );
|
||||
_userTriggered = false;
|
||||
}
|
||||
|
||||
protected override void OnDetaching()
|
||||
{
|
||||
AssociatedObject.SelectionChanged -= OnSelectionChanged;
|
||||
AssociatedObject.PreviewMouseDown -= OnPreviewMouseDown;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user