From 92b72ab822412e9eff4169b9687fd9af769204c7 Mon Sep 17 00:00:00 2001 From: Difegue <8237712+Difegue@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:48:44 +0200 Subject: [PATCH 1/4] Make sure combobox contents aren't clickable until the animation is complete --- src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml b/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml index c2ccdb78e..dec8f6720 100644 --- a/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml +++ b/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml @@ -270,6 +270,7 @@ Background="{DynamicResource ComboBoxDropDownBackground}" BorderBrush="{DynamicResource ComboBoxDropDownBorderBrush}" BorderThickness="1" + IsHitTestVisible="False" CornerRadius="{DynamicResource PopupCornerRadius}" SnapsToDevicePixels="True"> @@ -315,6 +316,10 @@ From="0" To="180" Duration="00:00:00.167" /> + + + + Date: Mon, 7 Jul 2025 14:53:03 +0200 Subject: [PATCH 2/4] Add placeholder support to ComboBoxes --- .../Views/Pages/BasicInput/ComboBoxPage.xaml | 12 +++++++++ src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml | 19 +++++++++++--- src/Wpf.Ui/Controls/ComboBoxHelper.cs | 25 +++++++++++++++++++ .../Converters/NullToVisibilityConverter.cs | 21 +++++++++++++++- 4 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 src/Wpf.Ui/Controls/ComboBoxHelper.cs diff --git a/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml b/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml index 10a4add10..1d313a4de 100644 --- a/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml +++ b/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml @@ -58,9 +58,21 @@ + + + + diff --git a/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml b/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml index dec8f6720..4d50167e8 100644 --- a/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml +++ b/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml @@ -14,8 +14,11 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:controls="clr-namespace:Wpf.Ui.Controls" + xmlns:converters="clr-namespace:Wpf.Ui.Converters" xmlns:system="clr-namespace:System;assembly=System.Runtime"> + + 10,8,10,8 1,1,1,1 0,0,0,2 @@ -181,10 +184,10 @@ + diff --git a/src/Wpf.Ui/Controls/ComboBoxHelper.cs b/src/Wpf.Ui/Controls/ComboBoxHelper.cs new file mode 100644 index 000000000..668525a8b --- /dev/null +++ b/src/Wpf.Ui/Controls/ComboBoxHelper.cs @@ -0,0 +1,25 @@ +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. +// Copyright (C) Leszek Pomianowski and WPF UI Contributors. +// All Rights Reserved. + +using System.Windows.Controls; + +namespace Wpf.Ui.Controls; + +/// +/// Used to extend the stock WPF ComboBox control. +/// +public static class ComboBoxHelper +{ + public static readonly DependencyProperty PlaceholderProperty = + DependencyProperty.RegisterAttached( + "Placeholder", + typeof(object), + typeof(ComboBoxHelper), + new PropertyMetadata(null)); + + public static object GetPlaceholder(ComboBox control) => control.GetValue(PlaceholderProperty); + + public static void SetPlaceholder(ComboBox control, object value) => control.SetValue(PlaceholderProperty, value); +} diff --git a/src/Wpf.Ui/Converters/NullToVisibilityConverter.cs b/src/Wpf.Ui/Converters/NullToVisibilityConverter.cs index fbbbbb4c9..0245f68c5 100644 --- a/src/Wpf.Ui/Converters/NullToVisibilityConverter.cs +++ b/src/Wpf.Ui/Converters/NullToVisibilityConverter.cs @@ -3,6 +3,7 @@ // Copyright (C) Leszek Pomianowski and WPF UI Contributors. // All Rights Reserved. +using System.Windows; using System.Windows.Data; namespace Wpf.Ui.Converters; @@ -11,7 +12,25 @@ internal class NullToVisibilityConverter : IValueConverter { public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) { - return value is null ? Visibility.Collapsed : Visibility.Visible; + if (value is string str) + { + value = string.IsNullOrEmpty(str); + } + else if (value == null) + { + value = true; + } + else + { + value = false; + } + + if (parameter is "invert") + { + return (bool)value ? Visibility.Visible : Visibility.Collapsed; + } + + return (bool)value ? Visibility.Collapsed : Visibility.Visible; } public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) From 2ba01fa88c56d816fc8220514bd060ae10b56720 Mon Sep 17 00:00:00 2001 From: Difegue <8237712+Difegue@users.noreply.github.com> Date: Tue, 8 Jul 2025 09:07:33 +0200 Subject: [PATCH 3/4] Update parameter naming --- src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml | 2 +- src/Wpf.Ui/Converters/NullToVisibilityConverter.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml b/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml index 4d50167e8..69ed20a80 100644 --- a/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml +++ b/src/Wpf.Ui/Controls/ComboBox/ComboBox.xaml @@ -216,7 +216,7 @@ TextElement.Foreground="{TemplateBinding Foreground}" Visibility="{TemplateBinding SelectionBoxItem, Converter={StaticResource NullToVisibilityConverter}, - ConverterParameter=invert}" /> + ConverterParameter=negate}" /> Date: Wed, 16 Jul 2025 15:49:43 +0200 Subject: [PATCH 4/4] Fix extra param --- src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml b/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml index 1d313a4de..73e3d63b3 100644 --- a/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml +++ b/src/Wpf.Ui.Gallery/Views/Pages/BasicInput/ComboBoxPage.xaml @@ -58,7 +58,6 @@