Skip to content

Commit 556b412

Browse files
authored
ToggleButton uses EllipseClipConverter (#3867)
* ToggleButton uses EllipseClipConverter * EllipseClipConverter: Changed to file-scoped namespace
1 parent 182b60a commit 556b412

File tree

2 files changed

+48
-28
lines changed

2 files changed

+48
-28
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Globalization;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using System.Windows.Data;
8+
using System.Windows.Media;
9+
10+
namespace MaterialDesignThemes.Wpf.Converters;
11+
12+
public class EllipseClipConverter : IMultiValueConverter
13+
{
14+
public static readonly EllipseClipConverter Instance = new();
15+
16+
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
17+
{
18+
if (values is [double width, double height, ..])
19+
{
20+
if (width < 1.0 || height < 1.0)
21+
{
22+
return Geometry.Empty;
23+
}
24+
25+
Point center = new Point(width / 2.0, height / 2.0);
26+
double radiusX = width / 2.0;
27+
double radiusY = height / 2.0;
28+
29+
EllipseGeometry geometry = new EllipseGeometry(center, radiusX, radiusY);
30+
geometry.Freeze();
31+
32+
return geometry;
33+
}
34+
35+
return DependencyProperty.UnsetValue;
36+
}
37+
38+
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
39+
=> throw new NotImplementedException();
40+
}

src/MaterialDesignThemes.Wpf/Themes/MaterialDesignTheme.ToggleButton.xaml

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -136,20 +136,10 @@
136136
ContentTemplate="{TemplateBinding ContentTemplate}"
137137
FlowDirection="LeftToRight" />
138138
<Grid.Clip>
139-
<EllipseGeometry RadiusX="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Width, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}" RadiusY="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}">
140-
<EllipseGeometry.Center>
141-
<MultiBinding Converter="{x:Static converters:PointValueConverter.Instance}">
142-
<Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
143-
ConverterParameter="2.0"
144-
Path="Width"
145-
RelativeSource="{RelativeSource TemplatedParent}" />
146-
<Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
147-
ConverterParameter="2.0"
148-
Path="Height"
149-
RelativeSource="{RelativeSource TemplatedParent}" />
150-
</MultiBinding>
151-
</EllipseGeometry.Center>
152-
</EllipseGeometry>
139+
<MultiBinding Converter="{x:Static converters:EllipseClipConverter.Instance}">
140+
<Binding Path="ActualWidth" RelativeSource="{RelativeSource TemplatedParent}" />
141+
<Binding Path="ActualHeight" RelativeSource="{RelativeSource TemplatedParent}" />
142+
</MultiBinding>
153143
</Grid.Clip>
154144
<Grid.RenderTransform>
155145
<ScaleTransform x:Name="OffScaleTransform" ScaleX="1" ScaleY="1" />
@@ -164,20 +154,10 @@
164154
ContentTemplate="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(wpf:ToggleButtonAssist.OnContentTemplate)}"
165155
FlowDirection="LeftToRight" />
166156
<Grid.Clip>
167-
<EllipseGeometry RadiusX="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Width, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}" RadiusY="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Height, Converter={x:Static converters:MathConverter.DivideInstance}, ConverterParameter=2.0}">
168-
<EllipseGeometry.Center>
169-
<MultiBinding Converter="{x:Static converters:PointValueConverter.Instance}">
170-
<Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
171-
ConverterParameter="2.0"
172-
Path="Width"
173-
RelativeSource="{RelativeSource TemplatedParent}" />
174-
<Binding Converter="{x:Static converters:MathConverter.DivideInstance}"
175-
ConverterParameter="2.0"
176-
Path="Height"
177-
RelativeSource="{RelativeSource TemplatedParent}" />
178-
</MultiBinding>
179-
</EllipseGeometry.Center>
180-
</EllipseGeometry>
157+
<MultiBinding Converter="{x:Static converters:EllipseClipConverter.Instance}">
158+
<Binding Path="ActualWidth" RelativeSource="{RelativeSource TemplatedParent}" />
159+
<Binding Path="ActualHeight" RelativeSource="{RelativeSource TemplatedParent}" />
160+
</MultiBinding>
181161
</Grid.Clip>
182162
<Grid.RenderTransform>
183163
<ScaleTransform x:Name="OnScaleTransform" ScaleX="0" ScaleY="1" />

0 commit comments

Comments
 (0)