diff --git a/src/settings-ui/Settings.UI/Converters/RunOptionTemplateSelector.cs b/src/settings-ui/Settings.UI/Converters/RunOptionTemplateSelector.cs
new file mode 100644
index 0000000000..575562da5d
--- /dev/null
+++ b/src/settings-ui/Settings.UI/Converters/RunOptionTemplateSelector.cs
@@ -0,0 +1,60 @@
+// Copyright (c) Microsoft Corporation
+// The Microsoft Corporation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using Microsoft.PowerToys.Settings.UI.Library;
+using Microsoft.PowerToys.Settings.UI.ViewModels;
+using Microsoft.UI.Xaml;
+using Microsoft.UI.Xaml.Controls;
+
+namespace Microsoft.PowerToys.Settings.UI.Converters
+{
+ public sealed class RunOptionTemplateSelector : DataTemplateSelector
+ {
+ public DataTemplate CheckBoxTemplate { get; set; }
+
+ public DataTemplate ComboBoxTemplate { get; set; }
+
+ public DataTemplate TextboxTemplate { get; set; }
+
+ public DataTemplate NumberBoxTemplate { get; set; }
+
+ public DataTemplate MultilineTextBoxTemplate { get; set; }
+
+ public DataTemplate CheckBoxComboBoxTemplate { get; set; }
+
+ public DataTemplate CheckBoxTextBoxTemplate { get; set; }
+
+ public DataTemplate CheckBoxMultilineTextBoxTemplate { get; set; }
+
+ public DataTemplate CheckBoxNumberBoxTemplate { get; set; }
+
+ ///
+ /// Gets or sets an empty template used as fall back in case of malformed data
+ ///
+ public DataTemplate EmptyTemplate { get; set; }
+
+ protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
+ {
+ if (item is PluginAdditionalOptionViewModel optionViewModel)
+ {
+ return optionViewModel.Type switch
+ {
+ PluginAdditionalOption.AdditionalOptionType.Checkbox => CheckBoxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.Combobox => ComboBoxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.Textbox => TextboxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.Numberbox => NumberBoxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.MultilineTextbox => MultilineTextBoxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.CheckboxAndCombobox => CheckBoxComboBoxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.CheckboxAndTextbox => CheckBoxTextBoxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.CheckboxAndNumberbox => CheckBoxNumberBoxTemplate,
+ PluginAdditionalOption.AdditionalOptionType.CheckboxAndMultilineTextbox => CheckBoxMultilineTextBoxTemplate,
+ _ => EmptyTemplate,
+ };
+ }
+
+ throw new ArgumentException("Item must be an PluginAdditionalOptionViewModel", nameof(item));
+ }
+ }
+}
diff --git a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml
index ca9a4d647d..1a2c01f6b3 100644
--- a/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml
+++ b/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml
@@ -4,6 +4,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModels="using:Microsoft.PowerToys.Settings.UI.ViewModels"
xmlns:controls="using:Microsoft.PowerToys.Settings.UI.Controls"
+ xmlns:converters="using:Microsoft.PowerToys.Settings.UI.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:ic="using:Microsoft.Xaml.Interactions.Core"
@@ -13,6 +14,293 @@
AutomationProperties.LandmarkType="Main"
mc:Ignorable="d">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -297,13 +585,11 @@
Style="{ThemeResource SecondaryTextStyle}" />
-
-
-
-
-
-
-
+
+
+
+
+
@@ -395,261 +681,8 @@
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
IsEnabled="{x:Bind Enabled, Mode=OneWay}"
- ItemsSource="{x:Bind Path=AdditionalOptions}">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ ItemTemplateSelector="{StaticResource RunOptionTemplateSelector}"
+ ItemsSource="{x:Bind Path=AdditionalOptions}" />
-
-
+
+
diff --git a/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs b/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs
index a6689e704d..d1c22ad0b5 100644
--- a/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs
+++ b/src/settings-ui/Settings.UI/ViewModels/PluginAdditionalOptionViewModel.cs
@@ -29,6 +29,8 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
public string SecondDisplayDescription => _additionalOption.SecondDisplayDescription;
+ public PluginAdditionalOption.AdditionalOptionType Type => _additionalOption.PluginOptionType;
+
// Bool checkbox setting
public bool ShowCheckBox => _additionalOption.PluginOptionType == PluginAdditionalOption.AdditionalOptionType.Checkbox;