Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/MaterialDesignThemes.Wpf/BindingProxy.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace MaterialDesignThemes.Wpf;

public class BindingProxy : Freezable
{
protected override Freezable CreateInstanceCore() => new BindingProxy();

public static readonly DependencyProperty DataProperty =
DependencyProperty.Register(nameof(Data), typeof(object), typeof(BindingProxy), new PropertyMetadata(null));

public object? Data
{
get => GetValue(DataProperty);
set => SetValue(DataProperty, value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,9 @@
</Grid>
<Grid x:Name="PathGrid" Margin="2" />
<Canvas>
<Canvas.Resources>
<wpf:BindingProxy x:Key="PathGridProxy" Data="{Binding ElementName=PathGrid}" />
</Canvas.Resources>
<Ellipse Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}"
Fill="{TemplateBinding Background}" />
Expand All @@ -184,22 +187,22 @@
StrokeThickness="3">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={x:Static circularProgressBarConverters:StartPointConverter.Instance}, Mode=OneWay}">
<ArcSegment Size="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={x:Static circularProgressBarConverters:ArcSizeConverter.Instance}, Mode=OneWay}" SweepDirection="Clockwise">
<PathFigure StartPoint="{Binding Source={StaticResource PathGridProxy}, Path=Data.ActualWidth, Converter={x:Static circularProgressBarConverters:StartPointConverter.Instance}, Mode=OneWay}">
<ArcSegment Size="{Binding Source={StaticResource PathGridProxy}, Path=Data.ActualWidth, Converter={x:Static circularProgressBarConverters:ArcSizeConverter.Instance}, Mode=OneWay}" SweepDirection="Clockwise">
<ArcSegment.Point>
<MultiBinding Converter="{x:Static circularProgressBarConverters:ArcEndPointConverter.Instance}" ConverterParameter="{x:Static circularProgressBarConverters:ArcEndPointConverter.ParameterMidPoint}">
<Binding ElementName="PathGrid" Path="ActualWidth" />
<Binding Source="{StaticResource PathGridProxy}" Path="Data.ActualWidth" />
<Binding Path="Value" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Minimum" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Maximum" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding ElementName="FullyIndeterminateGridScaleTransform" Path="ScaleX" />
</MultiBinding>
</ArcSegment.Point>
</ArcSegment>
<ArcSegment Size="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={x:Static circularProgressBarConverters:ArcSizeConverter.Instance}, Mode=OneWay}" SweepDirection="Clockwise">
<ArcSegment Size="{Binding Source={StaticResource PathGridProxy}, Path=Data.ActualWidth, Converter={x:Static circularProgressBarConverters:ArcSizeConverter.Instance}, Mode=OneWay}" SweepDirection="Clockwise">
<ArcSegment.Point>
<MultiBinding Converter="{x:Static circularProgressBarConverters:ArcEndPointConverter.Instance}">
<Binding ElementName="PathGrid" Path="ActualWidth" />
<Binding Source="{StaticResource PathGridProxy}" Path="Data.ActualWidth" />
<Binding Path="Value" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Minimum" RelativeSource="{RelativeSource TemplatedParent}" />
<Binding Path="Maximum" RelativeSource="{RelativeSource TemplatedParent}" />
Expand All @@ -212,7 +215,7 @@
</Path.Data>
<Path.RenderTransform>
<TransformGroup>
<RotateTransform x:Name="RotateTransform" CenterX="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={x:Static circularProgressBarConverters:RotateTransformCentreConverter.Instance}, Mode=OneWay}" CenterY="{Binding ElementName=PathGrid, Path=ActualWidth, Converter={x:Static circularProgressBarConverters:RotateTransformCentreConverter.Instance}, Mode=OneWay}" />
<RotateTransform x:Name="RotateTransform" CenterX="{Binding Source={StaticResource PathGridProxy}, Path=Data.ActualWidth, Converter={x:Static circularProgressBarConverters:RotateTransformCentreConverter.Instance}, Mode=OneWay}" CenterY="{Binding Source={StaticResource PathGridProxy}, Path=Data.ActualWidth, Converter={x:Static circularProgressBarConverters:RotateTransformCentreConverter.Instance}, Mode=OneWay}" />
</TransformGroup>
</Path.RenderTransform>
</Path>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,10 +267,13 @@
IsHitTestVisible="False"
RenderTransformOrigin="0.5,1"
Visibility="Collapsed">
<Grid.Resources>
<wpf:BindingProxy x:Key="labelProxy" Data="{Binding ElementName=label}" />
</Grid.Resources>
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0" ScaleY="0" />
<TranslateTransform X="{Binding ActualWidth, ElementName=label, Converter={x:Static convertersInternal:SliderValueLabelPositionConverter.Instance}, ConverterParameter={x:Static Orientation.Horizontal}}" Y="-40" />
<TranslateTransform X="{Binding Data.ActualWidth, Source={StaticResource labelProxy}, Converter={x:Static convertersInternal:SliderValueLabelPositionConverter.Instance}, ConverterParameter={x:Static Orientation.Horizontal}}" Y="-40" />
</TransformGroup>
</Grid.RenderTransform>
<AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
Expand Down Expand Up @@ -479,10 +482,13 @@
IsHitTestVisible="False"
RenderTransformOrigin="1,0.5"
Visibility="Collapsed">
<Grid.Resources>
<wpf:BindingProxy x:Key="labelProxy" Data="{Binding ElementName=label}" />
</Grid.Resources>
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0" ScaleY="0" />
<TranslateTransform X="{Binding ActualWidth, ElementName=label, Converter={x:Static convertersInternal:SliderValueLabelPositionConverter.Instance}, ConverterParameter={x:Static Orientation.Vertical}}" Y="-7" />
<TranslateTransform X="{Binding Data.ActualWidth, Source={StaticResource labelProxy}, Converter={x:Static convertersInternal:SliderValueLabelPositionConverter.Instance}, ConverterParameter={x:Static Orientation.Vertical}}" Y="-7" />
</TransformGroup>
</Grid.RenderTransform>
<AdornerDecorator CacheMode="{Binding RelativeSource={RelativeSource Self}, Path=(wpf:ShadowAssist.CacheMode)}">
Expand Down
Loading