Da ich hier im Forum des öfteren Statements oder Fragen wie "Ich kann kein WPF!" "Ist WPF schwerer als WinForms?" habe ich mal eine Kitschige Kunterbunte Analoguhr in WPF geschrieben, um den Leuten die sicht nicht mit WPF auskennen mal zu zeigen, das es eigentlich nicht schwer ist. Natürlich ist es gerade wenn man in WPF einsteigt etwas merkwürdig das man Graphische sachen in XAML schreibt und den Programmablauf in VB. Bitte entschuldigt das die Farben bzw. die Farbverlauf der Gradientbrushes so bunt ist, habe ich absichtlich gemacht damit nichtkenner mal sehen können wie leicht sich solche verläufe erstellen lassen.
Ich hoffe das ich mit diesem Post mal einige neugirig auf diese Technologie mache, und diese dann vieleicht doch mal überlegen darauf umzusteigen. Ich wünsche euch viel Spaß mit der Uhr. Den Code könnt ihr nutzen wie ihr wollt.
mfG
Derfuhr
Die Projektmappe selbstverständlich auch zum DL
XML-Quellcode
- <Window x:Class="MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- Title="MainWindow" Height="213" Width="190" AllowsTransparency="True" Background="Transparent" WindowStyle="None" ResizeMode="NoResize" >
- <Window.Resources>
- <Style TargetType="{x:Type Path}">
- <Setter Property="Stroke" Value="Gold" />
- <Setter Property="StrokeThickness" Value="7" />
- <Setter Property="StrokeStartLineCap" Value="Round" />
- <Setter Property="StrokeEndLineCap" Value="Round" />
- <Setter Property="StrokeLineJoin" Value="Round" />
- <Setter Property="StrokeDashCap" Value="Round" />
- </Style>
- </Window.Resources>
- <Grid Width="160" Height="160">
- <Ellipse Name="E1" Height="160" Width="160">
- <Ellipse.Fill>
- <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5" ColorInterpolationMode="SRgbLinearInterpolation" >
- <RadialGradientBrush.GradientStops>
- <GradientStop Color="Gold" Offset="0" />
- <GradientStop Color="Orange" Offset="0.1" />
- <GradientStop Color="Blue" Offset="0.5" />
- <GradientStop Color="red" Offset="0.83" />
- </RadialGradientBrush.GradientStops>
- </RadialGradientBrush>
- </Ellipse.Fill>
- </Ellipse>
- <Canvas Margin="-4,0,4,0">
- <Path Data="M 0 -68 A 68 68 0 1 1 -0.01 -68" StrokeDashArray="0 5.1 " Canvas.Top="80" Canvas.Left="84"/>
- </Canvas>
- <Path Stroke="Orange" StrokeThickness="5">
- <Path.Data>
- <LineGeometry StartPoint="80,80" EndPoint="80,35">
- <LineGeometry.Transform>
- <RotateTransform x:Name="Hours" Angle="0" CenterX="80" CenterY="80"/>
- </LineGeometry.Transform>
- </LineGeometry>
- </Path.Data>
- </Path>
- <Path Stroke="Orange" StrokeThickness="3.5">
- <Path.Data>
- <LineGeometry StartPoint="80,80" EndPoint="80,20">
- <LineGeometry.Transform>
- <RotateTransform x:Name="Minutes"
- Angle="0" CenterX="80" CenterY="80"/>
- </LineGeometry.Transform>
- </LineGeometry>
- </Path.Data>
- </Path>
- <Path Stroke="Red" StrokeThickness="2">
- <Path.Data>
- <LineGeometry StartPoint="80,80" EndPoint="80,15">
- <LineGeometry.Transform>
- <RotateTransform x:Name="Seconds"
- Angle="0" CenterX="80" CenterY="80"/>
- </LineGeometry.Transform>
- </LineGeometry>
- </Path.Data>
- </Path>
- <Ellipse Height="7" Width="7" Fill="Red"/>
- <Ellipse Opacity="0.40">
- <Ellipse.RenderTransform>
- <RotateTransform CenterX="80" CenterY="80" Angle="20" />
- </Ellipse.RenderTransform>
- <Ellipse.Fill>
- <LinearGradientBrush StartPoint="0,0" EndPoint="1,0" ColorInterpolationMode="ScRgbLinearInterpolation">
- <LinearGradientBrush.GradientStops>
- <GradientStop Color="Transparent" Offset="0.0" />
- <GradientStop Color="WhiteSmoke" Offset="0.4" />
- <GradientStop Color="Transparent" Offset="0.5" />
- <GradientStop Color="WhiteSmoke" Offset="0.75" />
- <GradientStop Color="Transparent" Offset="1" />
- </LinearGradientBrush.GradientStops>
- </LinearGradientBrush>
- </Ellipse.Fill>
- </Ellipse>
- <Ellipse StrokeThickness="5">
- <Ellipse.RenderTransform>
- <RotateTransform CenterX="80" CenterY="80" Angle="20" />
- </Ellipse.RenderTransform>
- <Ellipse.Stroke>
- <LinearGradientBrush StartPoint="0,0" EndPoint="1,0" ColorInterpolationMode="ScRgbLinearInterpolation">
- <LinearGradientBrush.GradientStops>
- <GradientStop Color="Blue" Offset="0.0" />
- <GradientStop Color="Deepskyblue" Offset="0.5" />
- <GradientStop Color="blue" Offset="1.0" />
- </LinearGradientBrush.GradientStops>
- </LinearGradientBrush>
- </Ellipse.Stroke>
- </Ellipse>
- </Grid>
- </Window>
VB.NET-Quellcode
- Imports System.Windows.Threading
- Class MainWindow
- Dim WithEvents timer As New DispatcherTimer()
- Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
- Hours.Angle = Date.Now.Hour * 30
- Minutes.Angle = Date.Now.Minute * 6
- Seconds.Angle = Date.Now.Second * 6
- timer.Interval = New TimeSpan(0, 0, 1)
- timer.IsEnabled = True
- End Sub
- Private Sub MainWindow_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Me.MouseDown
- If e.LeftButton = MouseButtonState.Pressed Then
- Me.DragMove()
- End If
- End Sub
- Private Sub MainWindow_MouseRightButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Me.MouseRightButtonUp
- Application.Current.Shutdown()
- End Sub
- Private Sub timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timer.Tick
- Dim percent_hour As Double = Date.Now.Minute / 6 * 10
- Seconds.Angle = Date.Now.Second * 6
- Minutes.Angle = Date.Now.Minute * 6
- Hours.Angle = Date.Now.Hour * 30 + (0.3 * percent_hour)
- End Sub
- End Class
Ich hoffe das ich mit diesem Post mal einige neugirig auf diese Technologie mache, und diese dann vieleicht doch mal überlegen darauf umzusteigen. Ich wünsche euch viel Spaß mit der Uhr. Den Code könnt ihr nutzen wie ihr wollt.
mfG
Derfuhr
Die Projektmappe selbstverständlich auch zum DL
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Derfuhr“ ()