WPF rendertransformorigin 0,0 0,1 1,0 1,1 0.5,0.5

//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;
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2025-03-29 21:36  FredGrit  阅读(14)  评论(0)    收藏  举报