//xaml
<Window x:Class="WpfApp186.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp186"
mc:Ignorable="d"
KeyDown="Window_KeyDown"
WindowState="Maximized"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="FontWeight" Value="Bold"/>
</Style>
</Window.Resources>
<Grid ShowGridLines="True">
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Text="0,0"
Grid.Row="0"
Grid.Column="0"/>
<Border Grid.Row="1"
Grid.Column="0"
Width="200"
Height="100"
Background="Black"
RenderTransformOrigin="0,0">
<Border.RenderTransform>
<RotateTransform x:Name="border1Rotater"/>
</Border.RenderTransform>
</Border>
<TextBlock Text="0,1"
Grid.Row="0"
Grid.Column="1"/>
<Border Grid.Row="1"
Grid.Column="1"
Width="200"
Height="100"
Background="Black"
RenderTransformOrigin="0,1">
<Border.RenderTransform>
<RotateTransform x:Name="border2Rotater"/>
</Border.RenderTransform>
</Border>
<TextBlock Text="1,0"
Grid.Row="0"
Grid.Column="2"/>
<Border Grid.Row="1"
Grid.Column="2"
Width="200"
Height="100"
Background="Black"
RenderTransformOrigin="1,0">
<Border.RenderTransform>
<RotateTransform x:Name="border3Rotater"/>
</Border.RenderTransform>
</Border>
<TextBlock Text="1,1"
Grid.Row="0"
Grid.Column="3"/>
<Border Grid.Row="1"
Grid.Column="3"
Width="200"
Height="100"
Background="Black"
RenderTransformOrigin="1,1">
<Border.RenderTransform>
<RotateTransform x:Name="border4Rotater"/>
</Border.RenderTransform>
</Border>
<TextBlock Text="0.5,0.5"
Grid.Row="0"
Grid.Column="4"/>
<Border Grid.Row="1"
Grid.Column="4"
Width="200"
Height="100"
Background="Black"
RenderTransformOrigin="0.5,0.5">
<Border.RenderTransform>
<RotateTransform x:Name="border5Rotater"/>
</Border.RenderTransform>
</Border>
</Grid>
</Window>
//xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp186
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
System.Timers.Timer tmr { get; set; }
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
this.SizeChanged += MainWindow_SizeChanged;
}
private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
{
Init();
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
Init();
}
private void Init()
{
if (tmr != null)
{
return;
}
tmr = new System.Timers.Timer();
tmr.Interval = 1000;
tmr.Elapsed += Tmr_Elapsed;
tmr.Start();
}
double angle = 0;
private void Tmr_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if(isPaused)
{
return;
}
angle += 60;
if (angle >= 360)
{
angle = 0;
}
Application.Current?.Dispatcher.BeginInvoke(new Action(() =>
{
border1Rotater.Angle= angle;
border2Rotater.Angle= angle;
border3Rotater.Angle= angle;
border4Rotater.Angle= angle;
border5Rotater.Angle = angle;
this.Title = angle.ToString();
}));
}
bool isPaused = false;
private void Window_KeyDown(object sender, KeyEventArgs e)
{
isPaused = !isPaused;
}
}
}
![]()
![]()
![]()
![]()
![]()
![]()