Browse Source

Fixed textboxes in color picker

flabbet 1 year ago
parent
commit
b4891fbaeb

+ 6 - 3
src/PixiEditor/Views/Dock/ColorPickerDockView.axaml

@@ -7,16 +7,19 @@
              xmlns:subViewModels="clr-namespace:PixiEditor.ViewModels.SubViewModels"
              xmlns:dock="clr-namespace:PixiEditor.ViewModels.Dock"
              xmlns:input="clr-namespace:PixiEditor.Views.Input"
+             xmlns:behaviours="clr-namespace:PixiEditor.Helpers.Behaviours"
+             xmlns:dock1="clr-namespace:PixiEditor.Views.Dock"
              mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
              x:DataType="dock:ColorPickerDockViewModel"
              x:Class="PixiEditor.Views.Dock.ColorPickerDockView">
     <Design.DataContext>
-        <dock:ColorPickerDockViewModel/>
+        <dock:ColorPickerDockViewModel />
     </Design.DataContext>
 
     <input:SmallColorPicker
         SelectedColor="{Binding ColorsSubViewModel.PrimaryColor, Mode=TwoWay, Converter={converters:GenericColorToMediaColorConverter}}"
         SecondaryColor="{Binding ColorsSubViewModel.SecondaryColor, Mode=TwoWay, Converter={converters:GenericColorToMediaColorConverter}}"
         ColorState="{Binding ColorsSubViewModel.PrimaryColorState, Mode=TwoWay}"
-        UseHintColor="False"/>
-</UserControl>
+        UseHintColor="False">
+    </input:SmallColorPicker>
+</UserControl>

+ 29 - 1
src/PixiEditor/Views/Dock/ColorPickerDockView.axaml.cs

@@ -1,4 +1,9 @@
 using Avalonia.Controls;
+using Avalonia.Controls.Primitives;
+using Avalonia.Interactivity;
+using Avalonia.VisualTree;
+using Avalonia.Xaml.Interactivity;
+using PixiEditor.Helpers.Behaviours;
 
 namespace PixiEditor.Views.Dock;
 
@@ -8,5 +13,28 @@ public partial class ColorPickerDockView : UserControl
     {
         InitializeComponent();
     }
-}
 
+    protected override void OnLoaded(RoutedEventArgs e)
+    {
+        base.OnLoaded(e);
+        var textBoxes = this.GetVisualDescendants().OfType<TextBox>().ToArray();
+
+        foreach (var textBox in textBoxes)
+        {
+            var existingBehaviors = Interaction.GetBehaviors(textBox);
+            bool attach = false;
+            if (existingBehaviors == null)
+            {
+                attach = true;
+                existingBehaviors = new BehaviorCollection();
+            }
+
+            existingBehaviors.Add(new GlobalShortcutFocusBehavior());
+
+            if (attach)
+            {
+                Interaction.SetBehaviors(textBox, existingBehaviors);
+            }
+        }
+    }
+}