Как я могу создать движущийся фон в wpf с C#? - PullRequest
0 голосов
/ 29 января 2020

Я студент, и я изучаю C# и Wpf, и я пытаюсь создать движущийся фон в окне, которое похоже на this , но внешний фон окна не отображается - это означает, что когда я переехал цвет фона обрезается по размеру окна.

Вот мой код:

xaml

<Window x:Class="krzyzowko_lamacz.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:krzyzowko_lamacz"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.Resources>
    <LinearGradientBrush StartPoint="0,0"   EndPoint="1,1"  x:Key="gradientTest">
        <GradientStop Color="Azure" Offset="0"/>
        <GradientStop Color="Coral" Offset="1"/>
    </LinearGradientBrush>
</Window.Resources>
<Grid  Background="{StaticResource gradientTest}" 
       Height="2000" Width="2000" 
       HorizontalAlignment="Center" 
       VerticalAlignment="Center" 
       x:Name="background" 
       PreviewMouseMove="background_PreviewMouseMove" 
       PreviewMouseUp="background_PreviewMouseUp" 
       PreviewMouseDown="background_PreviewMouseDown">
</Grid>

C#

public partial class MainWindow : Window
{
    private bool _isMoving;
    private Point _bacgroundPosition;
    private double deltaX;
    private double deltaY;
    private TranslateTransform _currentTT;

    public MainWindow()
    {
        InitializeComponent();
    }

    private void background_PreviewMouseUp(object sender, MouseButtonEventArgs e)
    {
        _currentTT = (background.RenderTransform as TranslateTransform);
        _isMoving = false;
    }

    private void background_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        if (_bacgroundPosition == null)
            _bacgroundPosition = background.TransformToAncestor(this).Transform(new Point(0, 0));

        var mousePoint = Mouse.GetPosition(this);
        deltaX = mousePoint.X - _bacgroundPosition.X;
        deltaY = mousePoint.Y - _bacgroundPosition.Y;
        _isMoving = true;
    }

    private void background_PreviewMouseMove(object sender, MouseEventArgs e)
    {
        if (!_isMoving) return;

        var mousePoint = Mouse.GetPosition(this);

        double offsetX, offsetY;

        if(_currentTT == null)
        {
            offsetX = _bacgroundPosition.X + deltaX - mousePoint.X;
            offsetY = _bacgroundPosition.Y + deltaY - mousePoint.Y;
        }
        else
        {
            offsetX = _bacgroundPosition.X - _currentTT.X + deltaX - mousePoint.X;
            offsetY = _bacgroundPosition.Y - _currentTT.Y + deltaY - mousePoint.Y;
        }

        background.RenderTransform = new TranslateTransform(-offsetX, -offsetY);
    }
}

Я знаю, что это стандартная функция, но я не знаю, где искать поиск. Может быть, кто-нибудь может мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...