テキストブロックをスクロールするには、次のことをお勧めします。translatetransformとクリッピングはそれほどスムーズではないため、xamlを追加しましょう。
<ScrollViewer Margin="40" Width="100" VerticalAlignment="Top" HorizontalAlignment="Left" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" HorizontalScrollMode="Enabled">
<i:Interaction.Behaviors>
<behaviors:ScrollHorizontalBehavior/>
</i:Interaction.Behaviors>
<TextBlock Foreground="White" Text="asdfasdfasdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf HALF asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf LAST" >
</TextBlock>
</ScrollViewer>
そして今、コンバーター:
public class ScrollHorizontalBehavior : DependencyObject, IBehavior
{
public DependencyObject AssociatedObject { get; private set; }
public void Attach(DependencyObject associatedObject)
{
AssociatedObject = associatedObject;
InitializeTranslation();
}
private DispatcherTimer UITimer { get; set; }
private void InitializeTranslation()
{
var element = AssociatedObject as ScrollViewer;
UITimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(30) };
UITimer.Tick += (s, e) =>
{
var newvalue = element.HorizontalOffset + 20;
if (newvalue > element.ScrollableWidth)
newvalue = 0;
element.ChangeView(newvalue, null, null);
};
UITimer.Start();
}
public void Detach()
{
if (UITimer != null) UITimer.Stop();
}
}
そして、この方法の最良の方法は、ご覧のとおり、スクロールの最後に何をするかを管理できることです。
そして今、点滅動作を追加します
<TextBlock Foreground="White" Text="asdfasdfasdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf HALF asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf asdf LAST" >
<i:Interaction.Behaviors>
<behaviors:BlinkingBehavior/>
</i:Interaction.Behaviors>
</TextBlock>
動作が簡単な場所:
public class BlinkingBehavior : DependencyObject, IBehavior
{
public DependencyObject AssociatedObject { get; private set; }
public void Attach(DependencyObject associatedObject)
{
AssociatedObject = associatedObject;
InitializeBlinking();
}
bool firstcolor = true;
private void InitializeBlinking()
{
var element = AssociatedObject as TextBlock;
var brushA = new SolidColorBrush(Colors.Red);
var brushB = new SolidColorBrush(Colors.White);
UITimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(1000) };
UITimer.Tick += (s, e) =>
{
element.Foreground = firstcolor ? brushA : brushB;
firstcolor = !firstcolor;
};
UITimer.Start();
}
private DispatcherTimer UITimer { get; set; }
public void Detach()
{
if (UITimer != null) UITimer.Stop();
}
}
注:私はWindows 10でそれを行ったので、あなたの場合は少し変わる可能性があります。作るのに少し時間がかかるので、本当に役立つと思ったら答えとしてマークしてください。