如何让标签文本自动滚动?

4
我有一个按钮,我想在里面放一些文本,但是有些文本可能太长了,无法很好地适配到按钮中。我希望让文本在按钮中以一行水平滚动的方式像HTML中的跑马灯一样。我可以让文本在一行中滚动,但是测试文本会被截断在按钮边缘,并且文本实际上会移出按钮而不是在按钮边缘消失。
我已经谷歌了一下我的问题并花费了几个小时,现在我认为是时候问问题了。
<Grid HeightRequest="400" Grid.Column="0" Grid.Row="0" >
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

    <Button BackgroundColor="#006633" Opacity="0.7" Grid.RowSpan="3" Grid.ColumnSpan="1">

    </Button>
    <Label x:Name="Label1" StyleClass="button" Grid.Row="1" Grid.Column="0" >

    </Label>
</Grid>

public void Marque1()
{
    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;

    Label1.TranslateTo(-50, 0, 8000, Easing.Linear);
}

我希望整个文本从右到左移动并重复,不要超出按钮的边界。
1个回答

3

你可以检查一下,这是否是你需要的效果:

public partial class MaqueText : ContentPage
{
    private bool Execute { get; set; }
    public MaqueText ()
    {
        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), () =>
        {
            Label1.TranslationX -= 5f;

            if (Math.Abs(Label1.TranslationX) > Width)
            {
                Label1.TranslationX = Label1.Width;
            }

            return Execute;
        });
    }
    protected override void OnDisappearing()
    {
        base.OnDisappearing();

        Execute = false;
    }
}

1
这并不能实现 marque 的真正用途 - 显示否则会溢出控件的文本。由于 LineBreakMode 被设置为 NoWrap,溢出的内容将永远不会被显示。减小 TranslationX 只会移动最初显示的任何文本,而不是呈现最初溢出的文本。 这样可以实现 marque 效果,而不会显示超出控件边界的更多内容。 - pizza_coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接