Я студент, и я изучаю 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);
}
}
Я знаю, что это стандартная функция, но я не знаю, где искать поиск. Может быть, кто-нибудь может мне помочь?