From 4f05150cee1476002b9760a576215a0693bddadc Mon Sep 17 00:00:00 2001 From: Joris Voermans Date: Tue, 10 Jun 2025 18:04:23 +0200 Subject: [PATCH 1/2] ToggleButton uses EllipseClipConverter --- .../Converters/EllipseClipConverter.cs | 41 +++++++++++++++++++ .../MaterialDesignTheme.ToggleButton.xaml | 36 ++++------------ 2 files changed, 49 insertions(+), 28 deletions(-) create mode 100644 src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs diff --git a/src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs b/src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs new file mode 100644 index 0000000000..4e918b2cf0 --- /dev/null +++ b/src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; +using System.Windows.Media; + +namespace MaterialDesignThemes.Wpf.Converters +{ + public class EllipseClipConverter : IMultiValueConverter + { + public static readonly EllipseClipConverter Instance = new(); + + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + if (values is [double width, double height, ..]) + { + if (width < 1.0 || height < 1.0) + { + return Geometry.Empty; + } + + Point center = new Point(width / 2.0, height / 2.0); + double radiusX = width / 2.0; + double radiusY = height / 2.0; + + EllipseGeometry geometry = new EllipseGeometry(center, radiusX, radiusY); + geometry.Freeze(); + + return geometry; + } + + return DependencyProperty.UnsetValue; + } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + => throw new NotImplementedException(); + } +} diff --git a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ToggleButton.xaml b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ToggleButton.xaml index a683767fc3..52e85b15ca 100644 --- a/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ToggleButton.xaml +++ b/src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ToggleButton.xaml @@ -136,20 +136,10 @@ ContentTemplate="{TemplateBinding ContentTemplate}" FlowDirection="LeftToRight" /> - - - - - - - - + + + + @@ -164,20 +154,10 @@ ContentTemplate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.OnContentTemplate)}" FlowDirection="LeftToRight" /> - - - - - - - - + + + + From 5fe460d8d0b94d0bc0f63c3285b1f83519f6ee2d Mon Sep 17 00:00:00 2001 From: Joris Voermans Date: Wed, 11 Jun 2025 08:10:24 +0200 Subject: [PATCH 2/2] EllipseClipConverter: Changed to file-scoped namespace --- .../Converters/EllipseClipConverter.cs | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs b/src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs index 4e918b2cf0..d5dbb3b3f0 100644 --- a/src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs +++ b/src/MaterialDesignThemes.Wpf/Converters/EllipseClipConverter.cs @@ -7,35 +7,34 @@ using System.Windows.Data; using System.Windows.Media; -namespace MaterialDesignThemes.Wpf.Converters +namespace MaterialDesignThemes.Wpf.Converters; + +public class EllipseClipConverter : IMultiValueConverter { - public class EllipseClipConverter : IMultiValueConverter - { - public static readonly EllipseClipConverter Instance = new(); + public static readonly EllipseClipConverter Instance = new(); - public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) + { + if (values is [double width, double height, ..]) { - if (values is [double width, double height, ..]) + if (width < 1.0 || height < 1.0) { - if (width < 1.0 || height < 1.0) - { - return Geometry.Empty; - } - - Point center = new Point(width / 2.0, height / 2.0); - double radiusX = width / 2.0; - double radiusY = height / 2.0; + return Geometry.Empty; + } - EllipseGeometry geometry = new EllipseGeometry(center, radiusX, radiusY); - geometry.Freeze(); + Point center = new Point(width / 2.0, height / 2.0); + double radiusX = width / 2.0; + double radiusY = height / 2.0; - return geometry; - } + EllipseGeometry geometry = new EllipseGeometry(center, radiusX, radiusY); + geometry.Freeze(); - return DependencyProperty.UnsetValue; + return geometry; } - public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) - => throw new NotImplementedException(); + return DependencyProperty.UnsetValue; } + + public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) + => throw new NotImplementedException(); }