Răsfoiți Sursa

BlendModeComboBox fixed

Krzysztof Krysiński 2 ani în urmă
părinte
comite
df04ea295b

+ 9 - 0
src/PixiEditor.AvaloniaUI/Styles/BlendModeComboBox.axaml

@@ -0,0 +1,9 @@
+<ResourceDictionary xmlns="https://github.com/avaloniaui"
+                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+                    xmlns:sys="using:System"
+                    xmlns:xaml="clr-namespace:PixiEditor.AvaloniaUI.Models.Commands.XAML"
+                    xmlns:input="clr-namespace:PixiEditor.AvaloniaUI.Views.Input">
+
+    <ControlTheme x:Key="{x:Type input:BlendModeComboBox}"
+                  TargetType="input:BlendModeComboBox" BasedOn="{StaticResource {x:Type ComboBox}}"/>
+</ResourceDictionary>

+ 1 - 0
src/PixiEditor.AvaloniaUI/Styles/PixiEditor.Controls.axaml

@@ -5,6 +5,7 @@
         <ResourceDictionary>
             <ResourceDictionary.MergedDictionaries>
                 <MergeResourceInclude Source="avares://PixiEditor.AvaloniaUI/Styles/CommandsMenu.axaml"/>
+                <MergeResourceInclude Source="avares://PixiEditor.AvaloniaUI/Styles/BlendModeComboBox.axaml"/>
             </ResourceDictionary.MergedDictionaries>
         </ResourceDictionary>
     </Styles.Resources>

+ 11 - 0
src/PixiEditor.AvaloniaUI/Views/Input/BlendModeComboBox.cs

@@ -1,6 +1,10 @@
 using System.Collections.Generic;
 using Avalonia;
 using Avalonia.Controls;
+using Avalonia.Controls.Generators;
+using Avalonia.Controls.Templates;
+using Avalonia.Layout;
+using Avalonia.Markup.Xaml.Templates;
 using PixiEditor.AvaloniaUI.Helpers.Extensions;
 using PixiEditor.ChangeableDocument.Enums;
 using PixiEditor.Extensions.UI;
@@ -29,10 +33,16 @@ internal class BlendModeComboBox : ComboBox
 
     public BlendModeComboBox()
     {
+        ItemsPanel = new FuncTemplate<Panel>(() => new StackPanel() { Orientation = Orientation.Vertical });
         AddItems();
         SelectionChanged += OnSelectionChange;
     }
 
+    protected override Control CreateContainerForItemOverride(object? item, int index, object? recycleKey)
+    {
+        return item is Separator ? new Separator() : base.CreateContainerForItemOverride(item, index, recycleKey);
+    }
+
     private void OnSelectionChange(object sender, SelectionChangedEventArgs e)
     {
         if (ignoreSelectionChange || e.AddedItems.Count == 0 || e.AddedItems[0] is not ComboBoxItem item || item.Tag is not BlendMode mode)
@@ -94,6 +104,7 @@ internal class BlendModeComboBox : ComboBox
             {
                 Translator.SetKey(boxItem, boxItem.Content.ToString());
             }
+
             Items.Add(item);
         }
         SelectedIndex = 0;

+ 3 - 2
src/PixiEditor.AvaloniaUI/Views/Layers/LayersManager.axaml

@@ -100,8 +100,9 @@
                 <input:BlendModeComboBox
                     DockPanel.Dock="Left"
                     Margin="0,0,5,0"
-                    Width="80"
-                    SelectedBlendMode="{Binding DataContext.ActiveDocument.SelectedStructureMember.BlendModeBindable, Mode=TwoWay, ElementName=layersManager}" />
+                    Width="120"
+                    SelectedBlendMode="{Binding DataContext.ActiveDocument.SelectedStructureMember.BlendModeBindable, Mode=TwoWay, ElementName=layersManager}">
+                </input:BlendModeComboBox>
                 <input:NumberInput
                     Min="0" Max="100"
                     x:Name="numberInput"

+ 1 - 1
src/PixiEditor.UI.Common/Controls/ComboBox.axaml

@@ -64,7 +64,7 @@
                 <ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
                               VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
                   <ItemsPresenter Name="PART_ItemsPresenter"
-                                  ItemsPanel="{TemplateBinding ItemsPanel}" />
+                                  ItemsPanel="{TemplateBinding ItemsPanel}"/>
                 </ScrollViewer>
               </Border>
             </Popup>