나는 TextBlock
에 애니메이션을 적용하고있다. 60 초가 지나면 FontSize
이 8pt에서 200pt로 증가합니다. 텍스트가 커짐에 따라 애니메이션이 약간 위아래로 움직이는 것을 제외하면 모든 것이 잘 작동합니다. 왜 이런 일이 일어나고 이것을 피할 수 있습니까?WPF : 애니메이션이 부드럽 지 않다.
<Window x:Class="Timer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="800"
Height="500"
Title="MainWindow"
Loaded="Window_Loaded">
<Grid>
<TextBlock
Name="TimerTextBlock"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="00h : 00m : 00.000s" />
</Grid>
</Window>
그리고 코드 숨김 똑같이 간단한 :
public partial class MainWindow : Window
{
private const string timerFormat = "{0:hh'h : 'mm'm : 'ss'.'fff's'}";
private DispatcherTimer dispatcherTimer;
private DateTime targetTime;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
targetTime = DateTime.Now.AddSeconds(60);
double totalTime = targetTime.Subtract(DateTime.Now).TotalMilliseconds;
DoubleAnimation animation = new DoubleAnimation();
animation.From = TimerTextBlock.FontSize;
animation.To = 200;
animation.Duration = new Duration(targetTime.Subtract(DateTime.Now));
TimerTextBlock.BeginAnimation(TextBlock.FontSizeProperty, animation);
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromMilliseconds(1);
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Start();
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
if (DateTime.Compare(targetTime, DateTime.Now) > 0)
{
TimerTextBlock.Text =
string.Format(timerFormat, targetTime.Subtract(DateTime.Now));
}
}
}
모든 해명 주셔서 감사합니다
내가
매우 간단한 XAML 파일이 있습니다.
필자는 이것이 '픽셀 분할'에 대한 문제라고 확실히 결론을 내 렸습니다. 컨트롤이 두 픽셀 사이 어딘가에 그려져야하는 상황에 이르면 조금 잘리는 것이 합리적입니다. 그러나, 어떻게 든 이것을 피할 수있는 방법이 있습니까? – Boris
나는 인터넷에서 해답을 찾고 있었고 몇몇 "MatrixAnimations"를 보았습니다. 그것은 무엇입니까, 그 트릭을 할 수 있을까요? (그리고 그렇다면, 어떻게?) – Boris