XAML ListView关注列表中的最后一项?- Xamarin Forms

goqiplq2  于 2023-02-27  发布在  其他
关注(0)|答案(2)|浏览(111)

有人能告诉我如何让ListView的焦点始终集中在列表的最后一项上吗?以WhatsApp中的对话为例,当我们发送消息时,刚刚到达的消息总是被聚焦...或者任何类似的解决方案?
我所寻找的是,无论什么时候在ListView中插入了什么,而不是给予选项来查看下面的项目,我希望它是相反的方式。总是显示屏幕上的最后一个项目。

cczfrluj

cczfrluj1#

我创建了一个示例,其中有两个元素,一个列表视图和一个用于添加新元素的按钮。
这是我的XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="4*" />
    </Grid.RowDefinitions>
    <ListView x:Name="ListView" />
    <Button
        Grid.Row="1"
        Clicked="Button_OnClicked"
        Text="Add animal" />
</Grid>

正如你所看到的按钮是非常巨大的,以显示更好的滚动。
在我的Code-behind中,我使用ListView.ScrollTo方法滚动到最后添加的元素,并带有动画:

public partial class MainPage : ContentPage
{
    private ObservableCollection<String> animals;
    private int _counter = 0;

    public MainPage()
    {
        InitializeComponent();
        animals = new ObservableCollection<string>(new List<string>{"dog","cat","fish","elephant","monkey"});
        ListView.ItemsSource = animals;
    }

    private void Button_OnClicked(object sender, EventArgs e)
    {
        var newElement = "new animal"+_counter;
        _counter++;
        animals.Add(newElement);
        ListView.ScrollTo(newElement, ScrollToPosition.End, true);
    }
}

我希望这能帮助你。

ajsxfq5m

ajsxfq5m2#

我发现这对我来说还不错:

lv_items.ScrollTo(lv_items.ItemsSource.Cast<YourItemsSourceType>().Last(), ScrollToPosition.End, false);

相关问题