Метка перемещения на таймере

#c# #xamarin #xamarin.forms

Вопрос:

Я использую Xamarin.Формы, и я хочу создать подвижную метку в своем приложении в режиме реального времени (по таймеру). Я создаю эту логику:

Код XAML:

 lt;ScrollView Grid.Row="0" VerticalOptions="End"   Orientation="Horizontal"   HorizontalScrollBarVisibility="Never"  Margin="0, 0, 0, 40"  x:Name="TickerTitleSound"  IsEnabled="False"   gt;  lt;Label  Text="{Binding SpecialText}" /gt;  lt;/ScrollViewgt;  

И код на C#, стоящий за:

 // Direction - bool class member TickerTitleSound.Scrolled  = (sender, e) =gt; {  double scrollingSpace = TickerTitleSound.ContentSize.Width - TickerTitleSound.Width;  if(TickerTitleSound.ScrollX gt;= scrollingSpace)  {  Direction = false;  }  else if(TickerTitleSound.ScrollX lt;= 0)  {  Direction = true;  } }; Timer timerSound = new Timer() { Interval = 100 }; timerSound.Elapsed  = async (o, e) =gt; {  await Task.Run(() =gt;  {  Device.BeginInvokeOnMainThread(() =gt;  {  if (Direction)  {  TickerTitleSound.ScrollToAsync(TickerTitleSound.ScaleX   10, 0, false);  }  else  {  TickerTitleSound.ScrollToAsync(TickerTitleSound.ScaleX - 10, 0, false);  }  });  }); }; timerSound.Start();  

Но этот код не работает. Я хочу получить этот результат:

введите описание изображения здесь

Как это сделать? У меня есть

Комментарии:

1. почему вы используете ScaleX вместо ScrollX этого ?

Ответ №1:

Вы можете установить перевод метки, вот мой пример кода ниже:

 public partial class TestPage1 : ContentPage {  private bool Execute { get; set; }  public TestPage ()  {  InitializeComponent ();  Label1.Text = "This is to simulate a really long sentence for testing purposes";  Label1.HorizontalOptions = LayoutOptions.Start;  Label1.VerticalTextAlignment = TextAlignment.Center;  Label1.LineBreakMode = LineBreakMode.NoWrap;  }  protected override void OnAppearing()  {  base.OnAppearing();  Execute = true;   Device.StartTimer(TimeSpan.FromMilliseconds(50), () =gt;  {  Label1.TranslationX -= 5f;   if (Math.Abs(Label1.TranslationX) gt; Width)  {  Label1.TranslationX = Label1.Width;  }   return Execute;  });  }  protected override void OnDisappearing()  {  base.OnDisappearing();   Execute = false;  } }