Donc, j'ai Circular Progress-Bar
et je veux positionner Label
autour du cercle Value
.Ajouter l'étiquette autour de la valeur du cercle
C'est ce que j'ai essayer:
<Grid x:Name="LayoutRoot" VerticalAlignment="Center" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<DesignInControl:CircularProgressBar HorizontalAlignment="Center" VerticalAlignment="Center" SegmentColor="#FF878889" StrokeThickness="25" Percentage="100" Radius="100"/>
<DesignInControl:CircularProgressBar x:Name="circle" HorizontalAlignment="Center" VerticalAlignment="Center" Percentage="0" SegmentColor="Red" StrokeThickness="25" Radius="100"/>
</Grid>
</StackPanel>
<Label x:Name="vlb" Content="{Binding ElementName=circle, Path=Percentage}" Margin="-50,-50,-50,-50" RenderTransformOrigin="0.5,0.5" Grid.RowSpan="2">
<Label.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="3600.12"/>
<TranslateTransform/>
</TransformGroup>
</Label.RenderTransform>
</Label>
</Grid>
maintenant dans ma Timer
tick je levai mon pourcentage Circelr de 1 à chaque seconde:
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
double d = circle.Percentage += 1;
var radius = 100;
var sangle = (d * 360)/100;
double angleRad = (Math.PI/180.0) * (sangle - 90);
double x = radius * Math.Cos(angleRad);
double y = radius * Math.Sin(angleRad);
vlb.RenderTransform = new RotateTransform { Angle = sangle, CenterX = 0, CenterY = 0 };
}
Et le résultat est que mon Label
est maintenant droit :
Mise à jour
<Grid x:Name="LayoutRoot" VerticalAlignment="Center" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<DesignInControl:CircularProgressBar HorizontalAlignment="Center" VerticalAlignment="Center" SegmentColor="#FF878889" StrokeThickness="25" Percentage="100" Radius="100"/>
<DesignInControl:CircularProgressBar x:Name="circle" HorizontalAlignment="Center" VerticalAlignment="Center" Percentage="0" SegmentColor="SeaGreen" StrokeThickness="25" Radius="100"/>
</Grid>
</StackPanel>
<Label x:Name="vlb_outer" Margin="-50,-50,-50,-50" RenderTransformOrigin="0.5,0.5" Grid.RowSpan="2">
<Label.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="50"/>
<TranslateTransform/>
</TransformGroup>
</Label.RenderTransform>
<Label Content="{Binding ElementName=circle, Path=Percentage}" FontSize="20" x:Name="vlb_inner">
<Label.RenderTransform>
<TransformGroup>
<RotateTransform Angle="-50"/>
</TransformGroup>
</Label.RenderTransform>
</Label>
</Label>
</Grid>
Résultat
Update
Position de départ:
Après augmentation Value
par 1
:
Le Label
est peu sur la taille gauche.
Alors ... quelle est votre question alors? De quelle manière voulez-vous que votre résultat diffère? –
Comment changer cette rotation d'étiquette? – user979033
A quoi ressemble votre code lors de la dernière édition et quelles sont les valeurs de chaque variable? –