diff --git a/src/AtomUI.Desktop.Controls.ColorPicker/ColorSlider/ColorSliderTrackButton.cs b/src/AtomUI.Desktop.Controls.ColorPicker/ColorSlider/ColorSliderTrackButton.cs
new file mode 100644
index 000000000..c0c8db9d7
--- /dev/null
+++ b/src/AtomUI.Desktop.Controls.ColorPicker/ColorSlider/ColorSliderTrackButton.cs
@@ -0,0 +1,7 @@
+using Avalonia.Controls;
+
+namespace AtomUI.Desktop.Controls;
+
+internal class ColorSliderTrackButton : RepeatButton
+{
+}
diff --git a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml
index 78ede51c7..358236fcb 100644
--- a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml
+++ b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTheme.axaml
@@ -29,34 +29,10 @@
Value="{TemplateBinding Value, Mode=TwoWay}"
ClipToBounds="False">
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTrackButtonTheme.cs b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTrackButtonTheme.cs
new file mode 100644
index 000000000..524de2240
--- /dev/null
+++ b/src/AtomUI.Desktop.Controls.ColorPicker/Themes/ColorSlider/ColorSliderTrackButtonTheme.cs
@@ -0,0 +1,7 @@
+using Avalonia.Styling;
+
+namespace AtomUI.Desktop.Controls.Themes;
+
+internal class ColorSliderTrackButtonTheme : ControlTheme
+{
+}
diff --git a/src/AtomUI.Desktop.Controls/ComboBox/ComboBoxTextBox.cs b/src/AtomUI.Desktop.Controls/ComboBox/ComboBoxTextBox.cs
new file mode 100644
index 000000000..058d9e0f2
--- /dev/null
+++ b/src/AtomUI.Desktop.Controls/ComboBox/ComboBoxTextBox.cs
@@ -0,0 +1,5 @@
+namespace AtomUI.Desktop.Controls;
+
+internal class ComboBoxTextBox : Avalonia.Controls.TextBox
+{
+}
diff --git a/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTextBoxTheme.axaml b/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTextBoxTheme.axaml
new file mode 100644
index 000000000..2c4a9c32f
--- /dev/null
+++ b/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTextBoxTheme.axaml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTextBoxTheme.cs b/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTextBoxTheme.cs
new file mode 100644
index 000000000..1ec4c6f35
--- /dev/null
+++ b/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTextBoxTheme.cs
@@ -0,0 +1,7 @@
+using Avalonia.Styling;
+
+namespace AtomUI.Desktop.Controls.Themes;
+
+internal class ComboBoxTextBoxTheme : ControlTheme
+{
+}
diff --git a/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTheme.axaml b/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTheme.axaml
index 78df493fc..eb5579c3a 100644
--- a/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTheme.axaml
+++ b/src/AtomUI.Desktop.Controls/ComboBox/Themes/ComboBoxTheme.axaml
@@ -62,7 +62,7 @@
atom:OverflowTip.ShowDelay="{TemplateBinding OverflowTipDelay}"
atom:OverflowTip.Placement="{TemplateBinding OverflowTipPlacement}"
atom:OverflowTip.PlacementTarget="{Binding $parent[atom:AddOnDecoratedBox]}" />
-
-
-
-
-
-
-
-
-
-
-
-
+ IsVisible="{TemplateBinding IsEditable}" />
diff --git a/tests/AtomUI.Desktop.Controls.Tests/Theme/ThemeSelectorBoundaryTests.cs b/tests/AtomUI.Desktop.Controls.Tests/Theme/ThemeSelectorBoundaryTests.cs
index 58f40be7a..f2c2895a9 100644
--- a/tests/AtomUI.Desktop.Controls.Tests/Theme/ThemeSelectorBoundaryTests.cs
+++ b/tests/AtomUI.Desktop.Controls.Tests/Theme/ThemeSelectorBoundaryTests.cs
@@ -37,6 +37,30 @@ public class ThemeSelectorBoundaryTests
violations.Count.ShouldBe(0, string.Join(Environment.NewLine, violations));
}
+ [Fact]
+ public void Production_ControlThemes_Do_Not_Override_Child_Control_Templates()
+ {
+ var repositoryRoot = GetRepositoryRoot();
+ var sourceRoot = Path.Combine(repositoryRoot, "src");
+ var violations = new List();
+
+ foreach (var path in Directory.EnumerateFiles(sourceRoot, "*.axaml", SearchOption.AllDirectories))
+ {
+ var document = XDocument.Load(path);
+ foreach (var theme in document.Descendants().Where(element => element.Name.LocalName == "ControlTheme"))
+ {
+ foreach (var templateProperty in theme.Descendants()
+ .Where(element => element.Name.LocalName.EndsWith(".Template", StringComparison.Ordinal)))
+ {
+ violations.Add(
+ $"{Path.GetRelativePath(repositoryRoot, path)}: {templateProperty.Name.LocalName}");
+ }
+ }
+ }
+
+ violations.Count.ShouldBe(0, string.Join(Environment.NewLine, violations));
+ }
+
private static int CountTemplateBoundaries(string selector)
{
var count = 0;