Guten Abend liebe Community,
ich habe mir einen kleinen Prototypen für eine Laufschrift erstellt. Dabei "läuft" das Label vom rechten Bildschirmrand zum Linken. Dort angekommen, fängt es wieder bei rechts an, sodass es unendlich wirkt. Vergleichbar mit einem Newsticker.
Mein Problem ist leider, dass das Label sehr ruckelartig seine Position verschiebt. Es wirkt einfach unsanft/unsauber. Ich verschiebe das Label alle 33 ms um 1.0 nach links.
Mein Renderer läuft hardwareseitig ( Tier 2).
Framework: 4.5
XAML:
XAML.CS:
Über Ratschläge bedanke ich mich im Voraus und verbleibe
mit freundlichen Grüßen
- Les
ich habe mir einen kleinen Prototypen für eine Laufschrift erstellt. Dabei "läuft" das Label vom rechten Bildschirmrand zum Linken. Dort angekommen, fängt es wieder bei rechts an, sodass es unendlich wirkt. Vergleichbar mit einem Newsticker.
Mein Problem ist leider, dass das Label sehr ruckelartig seine Position verschiebt. Es wirkt einfach unsanft/unsauber. Ich verschiebe das Label alle 33 ms um 1.0 nach links.
Mein Renderer läuft hardwareseitig ( Tier 2).
Framework: 4.5
XAML:
Code:
<Window x:Class="Canny.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="811" Name="main">
<Canvas Name="myCanvas" Background="Black">
<Label Name="lb1" Content="Lauftext+++" Foreground="WhiteSmoke" FontSize="25" Canvas.Left="618" Canvas.Top="10" FontFamily="Courier New" FontWeight="ExtraBold" FontStretch="UltraExpanded"/>
</Canvas>
</Window>
XAML.CS:
Code:
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Threading;
namespace Canny
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
DispatcherTimer timer;
double newPos;
readonly double actualWidthLb;
int renderingTier;
public MainWindow()
{
InitializeComponent();
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(33.0);
timer.Tick += timer_Tick;
newPos = myCanvas.ActualWidth;
actualWidthLb = lb1.ActualWidth;
timer.Start();
renderingTier = (RenderCapability.Tier >> 16);
}
void timer_Tick(object sender, EventArgs e)
{
newPos -= 1.0;
Canvas.SetLeft(lb1,newPos);
if (Canvas.GetLeft(lb1) + actualWidthLb <= 0)
{
Canvas.SetLeft(lb1, myCanvas.ActualWidth);
newPos = myCanvas.ActualWidth;
}
}
}
}
Über Ratschläge bedanke ich mich im Voraus und verbleibe
mit freundlichen Grüßen
- Les