-
C# WPF TextBlock의 Text를 오른쪽에서 왼쪽으로 애니메이션(BeginAnimation, 롤링) 하는방법닷넷/WPF 2023. 3. 21. 13:10반응형
1. MainWindow.xaml 뷰에는 텍스트를 입력하는 TextBox와 TextBox에 입력된 텍스트가 바인딩되는 TextBlock이 있습니다.
<Window x:Class="WPF_TextBlocK_Rolling.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:WPF_TextBlocK_Rolling" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <StackPanel> <TextBox x:Name="inputText" Text="여기에 롤링 텍스트를 입력하세요." FontSize="24" /> <Canvas Grid.Row="1" x:Name="canvas"> <TextBlock x:Name="rollingText" Text="{Binding Text, ElementName=inputText}" FontSize="24" Canvas.Left="0" SizeChanged="rollingText_SizeChanged"/> </Canvas> </StackPanel> </Grid> </Window>
2. MainWindow.xaml.cs 뷰의 비하인드 코드에 TextBlock의 크기가 Canvas 크기를 넘어가면 애니메이션이 시작되고, 넘어가지 않으면 중지되는 StartRollingAnimation 메소드를 작성합니다.
using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Animation; namespace WPF_TextBlocK_Rolling { /// <summary> /// MainWindow.xaml에 대한 상호 작용 논리 /// </summary> public partial class MainWindow : Window { // TextBlock의 원래 위치를 저장하는 변수 private double rollingTextOriginalLeft; public MainWindow() { InitializeComponent(); // TextBlock의 원래 위치를 저장 rollingTextOriginalLeft = rollingText.ActualWidth; } private void StartRollingAnimation() { // TextBlock의 너비가 캔버스 너비보다 크면 애니메이션 시작 if (rollingText.ActualWidth > canvas.ActualWidth) { DoubleAnimation rollingAnimation = new DoubleAnimation { From = canvas.ActualWidth, // 시작 위치 To = -rollingText.ActualWidth, // 종료 위치 Duration = new Duration(TimeSpan.FromSeconds(30)), // 애니메이션 지속 시간 RepeatBehavior = RepeatBehavior.Forever // 반복 여부 }; rollingText.BeginAnimation(Canvas.LeftProperty, rollingAnimation); } else { // TextBlock의 너비가 캔버스 너비보다 작으면 애니메이션 중지 rollingText.BeginAnimation(Canvas.LeftProperty, null); // TextBlock의 위치를 원래 위치로 조정하여 텍스트가 고정적으로 표시되도록 함 Canvas.SetLeft(rollingText, rollingTextOriginalLeft); // TextBlock을 가운데 정렬하려면 아래와 같이 코딩 // double left = (canvas.ActualWidth - rollingText.ActualWidth) / 2; // Canvas.SetLeft(rollingText, left); } } private void rollingText_SizeChanged(object sender, SizeChangedEventArgs e) { // TextBlock의 크기가 변경될 때마다 애니메이션 재시작 StartRollingAnimation(); } } }
시작 위치는 Canvas의 너비로 하고 종료 위치는 TextBlock의 너비에서 마이너스를 하면 오른쪽에서 왼쪽으로 애니메이션 됩니다.
왼쪽에서 오른쪽으로 애니메이션되게 하려면 시작위치는 0으로 하고, 종료 위치는 TextBlock의 너비로 하면 됩니다.
From = 0, // 시작 위치
To = rollingText.ActualWidth, // 종료 위치반응형'닷넷 > WPF' 카테고리의 다른 글
C# WPF에서 Binding(바인딩)이란? (0) 2023.04.07 C# WPF TextBlock이 렌더링 되지 않은 상태에서 ActualWidth 값이 계산되게 하는 방법 (0) 2023.03.28 [WPF WebBrowser] C#에서 자바스크립트 함수를 호출하거나 자바스크립트에서 C# 메소드를 호출하는 방법 (0) 2023.03.20 C# WPF에서 DataGrid에 데이터를 바인딩하는 간단한 예제 (0) 2023.03.09 C# WPF에서 특정 컨트롤을 최상단에 표시하는 방법 (0) 2023.02.20