WPF Analoguhr Quellcode für WPF Anfänger

    • WPF

      WPF Analoguhr Quellcode für WPF Anfänger

      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.

      XML-Quellcode

      1. <Window x:Class="MainWindow"
      2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      4. Title="MainWindow" Height="213" Width="190" AllowsTransparency="True" Background="Transparent" WindowStyle="None" ResizeMode="NoResize" >
      5. <Window.Resources>
      6. <Style TargetType="{x:Type Path}">
      7. <Setter Property="Stroke" Value="Gold" />
      8. <Setter Property="StrokeThickness" Value="7" />
      9. <Setter Property="StrokeStartLineCap" Value="Round" />
      10. <Setter Property="StrokeEndLineCap" Value="Round" />
      11. <Setter Property="StrokeLineJoin" Value="Round" />
      12. <Setter Property="StrokeDashCap" Value="Round" />
      13. </Style>
      14. </Window.Resources>
      15. <Grid Width="160" Height="160">
      16. <Ellipse Name="E1" Height="160" Width="160">
      17. <Ellipse.Fill>
      18. <RadialGradientBrush GradientOrigin="0.5,0.5" Center="0.5,0.5" RadiusX="0.5" RadiusY="0.5" ColorInterpolationMode="SRgbLinearInterpolation" >
      19. <RadialGradientBrush.GradientStops>
      20. <GradientStop Color="Gold" Offset="0" />
      21. <GradientStop Color="Orange" Offset="0.1" />
      22. <GradientStop Color="Blue" Offset="0.5" />
      23. <GradientStop Color="red" Offset="0.83" />
      24. </RadialGradientBrush.GradientStops>
      25. </RadialGradientBrush>
      26. </Ellipse.Fill>
      27. </Ellipse>
      28. <Canvas Margin="-4,0,4,0">
      29. <Path Data="M 0 -68 A 68 68 0 1 1 -0.01 -68" StrokeDashArray="0 5.1 " Canvas.Top="80" Canvas.Left="84"/>
      30. </Canvas>
      31. <Path Stroke="Orange" StrokeThickness="5">
      32. <Path.Data>
      33. <LineGeometry StartPoint="80,80" EndPoint="80,35">
      34. <LineGeometry.Transform>
      35. <RotateTransform x:Name="Hours" Angle="0" CenterX="80" CenterY="80"/>
      36. </LineGeometry.Transform>
      37. </LineGeometry>
      38. </Path.Data>
      39. </Path>
      40. <Path Stroke="Orange" StrokeThickness="3.5">
      41. <Path.Data>
      42. <LineGeometry StartPoint="80,80" EndPoint="80,20">
      43. <LineGeometry.Transform>
      44. <RotateTransform x:Name="Minutes"
      45. Angle="0" CenterX="80" CenterY="80"/>
      46. </LineGeometry.Transform>
      47. </LineGeometry>
      48. </Path.Data>
      49. </Path>
      50. <Path Stroke="Red" StrokeThickness="2">
      51. <Path.Data>
      52. <LineGeometry StartPoint="80,80" EndPoint="80,15">
      53. <LineGeometry.Transform>
      54. <RotateTransform x:Name="Seconds"
      55. Angle="0" CenterX="80" CenterY="80"/>
      56. </LineGeometry.Transform>
      57. </LineGeometry>
      58. </Path.Data>
      59. </Path>
      60. <Ellipse Height="7" Width="7" Fill="Red"/>
      61. <Ellipse Opacity="0.40">
      62. <Ellipse.RenderTransform>
      63. <RotateTransform CenterX="80" CenterY="80" Angle="20" />
      64. </Ellipse.RenderTransform>
      65. <Ellipse.Fill>
      66. <LinearGradientBrush StartPoint="0,0" EndPoint="1,0" ColorInterpolationMode="ScRgbLinearInterpolation">
      67. <LinearGradientBrush.GradientStops>
      68. <GradientStop Color="Transparent" Offset="0.0" />
      69. <GradientStop Color="WhiteSmoke" Offset="0.4" />
      70. <GradientStop Color="Transparent" Offset="0.5" />
      71. <GradientStop Color="WhiteSmoke" Offset="0.75" />
      72. <GradientStop Color="Transparent" Offset="1" />
      73. </LinearGradientBrush.GradientStops>
      74. </LinearGradientBrush>
      75. </Ellipse.Fill>
      76. </Ellipse>
      77. <Ellipse StrokeThickness="5">
      78. <Ellipse.RenderTransform>
      79. <RotateTransform CenterX="80" CenterY="80" Angle="20" />
      80. </Ellipse.RenderTransform>
      81. <Ellipse.Stroke>
      82. <LinearGradientBrush StartPoint="0,0" EndPoint="1,0" ColorInterpolationMode="ScRgbLinearInterpolation">
      83. <LinearGradientBrush.GradientStops>
      84. <GradientStop Color="Blue" Offset="0.0" />
      85. <GradientStop Color="Deepskyblue" Offset="0.5" />
      86. <GradientStop Color="blue" Offset="1.0" />
      87. </LinearGradientBrush.GradientStops>
      88. </LinearGradientBrush>
      89. </Ellipse.Stroke>
      90. </Ellipse>
      91. </Grid>
      92. </Window>

      VB.NET-Quellcode

      1. Imports System.Windows.Threading
      2. Class MainWindow
      3. Dim WithEvents timer As New DispatcherTimer()
      4. Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
      5. Hours.Angle = Date.Now.Hour * 30
      6. Minutes.Angle = Date.Now.Minute * 6
      7. Seconds.Angle = Date.Now.Second * 6
      8. timer.Interval = New TimeSpan(0, 0, 1)
      9. timer.IsEnabled = True
      10. End Sub
      11. Private Sub MainWindow_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Me.MouseDown
      12. If e.LeftButton = MouseButtonState.Pressed Then
      13. Me.DragMove()
      14. End If
      15. End Sub
      16. Private Sub MainWindow_MouseRightButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles Me.MouseRightButtonUp
      17. Application.Current.Shutdown()
      18. End Sub
      19. Private Sub timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles timer.Tick
      20. Dim percent_hour As Double = Date.Now.Minute / 6 * 10
      21. Seconds.Angle = Date.Now.Second * 6
      22. Minutes.Angle = Date.Now.Minute * 6
      23. Hours.Angle = Date.Now.Hour * 30 + (0.3 * percent_hour)
      24. End Sub
      25. 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
      Dateien
      • WPF Clock.7z

        (35,13 kB, 386 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Derfuhr“ ()